3
votes

I'm trying to install Caffe on Debian, but when i do make all i get this error:

/usr/bin/ld: /usr/local/lib/libglog.a(logging.cc.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

/usr/local/lib/libglog.a: could not read symbols: Bad value

collect2: error: ld returned 1 exit status make: *** [.build_release/lib/libcaffe.so] Error 1

where should i add the -fPIC flag? I also read that it wasn't enough for gflags.

Any suggestions?

2
Does Caffe have documentation on adding to any specific CFLAGS-like variable? You might also want to report to them that their build is broken (because it is) and that they should be handling this themselves. - Etan Reisner
i can't find any documentation about adding specific CFLAGS - user2071581
Oh, hm, I hadn't properly read that error. That might be an issue with how you compiled the glog library. (I assume you compiled that yourself.) You might need to recompile that library with -fPIC. - Etan Reisner
after some tries i solved recompiling glog and gflags with -fPIC thank you :) - user2071581
If you can write up your solution you should add it as an answer here and accept it. You might also want to report this to the glog people. - Etan Reisner

2 Answers

0
votes

Seems like the only solution in to recompile the problematic 3rd parties with -fPIC. (Unless you can link to the .so instead of the .a)
The standard build of static libraries in packages is to build without -fPIC.
In glog, for example, you should add it to the C flags in compile.ac.

0
votes

In glog, adding -fPIC to AM_CXXFLAGS in Makefile.am works. Adding it to the CXXFLAGS environment variable had no effect for me.