我目前的命令:
c++ -fPIC -c algo_cython.cpp ld -shared algo_cython.o -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -lc -lstdc++ -o algo_cython.so
而错误:
algo_cython.o: In function `__static_initialization_and_destruction_0(int, int)': algo_cython.cpp:(.text+0x83e4): undefined reference to `__dso_handle' ld: algo_cython.o: relocation R_X86_64_PC32 against undefined hidden symbol `__dso_handle' can not be used when making a shared object ld: final link failed: Bad value
使用选项-fPIC
编译algo_cython.cpp
– 如果没有这个标志,你不能在64位上编译共享对象,所以编译的行应该是:
c++ -fPIC -c algo_cython.cpp
另外,我实际上使用编译器驱动程序来产生共享对象,而不是直接调用ld
即可以使用:
c++ -shared algo_cython.o -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -lc -lstdc++ -o algo_cython.so
除非你真的想做一些不能被编译器驱动的东西,否则直接调用ld
并不是你想要做的。