我已经静态编译 Python2.7 没有任何错误。为了测试我的构建,我使用以下代码段:
#include "Python.h"
int main()
{
Py_Initialize();
}
我正在编译它:
$ gcc -static -I/path/to/python/header -L/path/to/my/staticpythonlib \
-lpython2.7 -ldl -l_all_other_needed_lib /tmp/my_previous_snippet.c -o myouput
但是,发生了错误。gcc 声称著名的undefined reference
.
test.c:(.text+0x1): 对“Py_Initialize”的未定义引用
奇怪的是,我使用了带有详细标志的 gcc(我不会在此处粘贴结果),编译器说,它正在使用我的 libpython,但找不到参考。所以我列出了我的静态 python2.7 库的符号:
$ nm /path/to/pythonlib |grep Py_Initialize
frozenmain.o U Py_Initialize
pythonrun.o 0000009e9 T Py_Initialize
pythonrun.o 000000052 T Py_Initialize_Ex
main.o U Py_Initialize
我们可以看到,Py_Initialize
在 pythonrun.o 中正确引用了它。但是我不知道编译器如何选择正确的目标文件。
我的问题是:
- 我如何确定 gcc 在我的 .a 库中使用了正确的目标文件?
- 我的编译选项有什么问题吗?
谢谢你的帮助。