如何链接libpython.a以便运行时链接器能找到所有符号?
在这个问题的后续提问中,我的公司环境里没有 libpython2.6.so
这个共享库,但有 libpython2.6.a
这个文件。请问有没有办法在编译时使用 libpython2.6.a
,同时保留它里面的符号,这样动态库在运行时就能找到这些符号呢?
我现在使用静态库编译的代码看起来是这样的:
g++ -I/usr/CORP/pkgs/python/2.6.2/include/python2.6 \
~/tmp.cpp -pthread -lm -ldl -lutil \
/usr/CORP/pkgs/python/2.6.2/lib/python2.6/config/libpython2.6.a \
-o tmp.exe
不过,如果我加载一个像 'math' 这样的模块,就会出现错误:
undefined symbol: PyInt_FromLong
1 个回答
4
你需要在链接的时候加上 --export-dynamic
这个选项。所以如果你用 g++
来编译的话,应该这样写...
g++ -Wl,--export-dynamic ...