如何链接libpython.a以便运行时链接器能找到所有符号?

2 投票
1 回答
4189 浏览
提问于 2025-04-15 14:34

在这个问题的后续提问中,我的公司环境里没有 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 ...

撰写回答