I have Boost installed on my system as a shared library, so I don't understand why libtool/gcc won't link to it.

Hmm okay, I think I've just discovered why - it seems my local installation of Boost was compiled without the -fPIC flag, as I have problems even with trivial compiles, without using automake/libtool:

$ g++ -fPIC -c -o main.o main.cpp -I/usr/include/boost-1_37/ && g++ -fPIC -o test.so main.o -shared -lboost_system-mt-1_37 -lboost_filesystem-mt-1_37

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/../../../../lib64/libboost_system-mt-1_37.a(error_code.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/../../../../lib64/libboost_system-mt-1_37.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

I think it must have been the way Boost was compiled, because I get the same error even when I don't link to any libraries:

$ g++ -c -o main.o main.cpp -I/usr/include/boost-1_37/ && g++ -o test.so main.o -shared

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/../../../../x86_64-pc-linux-gnu/bin/ld: main.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
main.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

But if I add -fPIC in that case, it works:

$ g++ -fPIC -c -o main.o main.cpp -I/usr/include/boost-1_37/ && g++ -o test.so main.o -shared

Given that I've used -fPIC in the first command above, it would seem that my local installation of Boost was compiled without -fPIC, so it looks like all I need to do is figure out how to do that and everything should work...

Thanks for all your help!

Cheers,
Adam.


Reply via email to