Tôi đã biên dịch tĩnh Python2.7 mà không có bất kỳ lỗi nào. Để kiểm tra xây dựng của tôi, tôi sử dụng đoạn mã sau:Python - Py_Initialize chưa được giải quyết trong khi biên dịch
#include "Python.h"
int main()
{
Py_Initialize();
}
Và tôi đang biên soạn nó như thế này:
$ 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
Tuy nhiên, một lỗi xảy ra. gcc tuyên bố số undefined reference
nổi tiếng.
test.c :(văn bản + 0x1):. Tham khảo Không xác định để 'Py_Initialize'
Tò mò tôi đã sử dụng gcc với cờ cách rườm rà (Tôi sẽ không dán kết quả ở đây) và trình biên dịch nói rằng, nó sử dụng libpython của tôi, nhưng không thể tìm thấy tài liệu tham khảo. Vì vậy, tôi liệt kê những biểu tượng của thư viện python2.7 tĩnh của tôi:
$ 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
Chúng ta có thể thấy, đó Py_Initialize
được tham chiếu một cách chính xác trong pythonrun.o. Tuy nhiên tôi không biết làm thế nào trình biên dịch đã chọn đúng đối tượng tập tin.
Câu hỏi của tôi là:
- Làm thế nào tôi có thể chắc chắn, gcc có sử dụng các tập tin đối tượng đúng trong lib .a tôi?
- Có điều gì sai về các tùy chọn biên dịch của tôi không?
Cảm ơn sự giúp đỡ của bạn.
Đây là một lỗi xảy ra trong mối liên hệ không trong biên dịch. – alk