如何将Python C模块与`ld`连接起来。 对`__dso_handle'的未定义引用

我目前的命令:

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并不是你想要做的。