Я пытаюсь скомпилировать пример из документации https://docs.python.org/2.7/extending/embedding.html и мой код выглядит точно так же, как один под 5.1:Вложение Python в C, связывание терпит неудачу с неопределенной ссылкой на `Py_Initialize»
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]);
Py_Initialize();
PyRun_SimpleString("from time import time, ctime\n"
"print 'Today is', ctime(time())\n");
Py_Finalize();
return 0;
}
Я использую следующие команда для компиляции, которая работает хорошо для меня и дает мне нужный объектный файл:
gcc -c $(python2.7-config --cflags) embedpy.c
чтобы связать его я использую следующую команду, которая заканчивается в следующей ошибке:
gcc $(/usr/bin/python2.7-config --ldflags) embedpy.o
embedpy.o: In function `main':
/home/miguellissimo/embedpy.c:6: undefined reference to `Py_SetProgramName'
/home/miguellissimo/embedpy.c:7: undefined reference to `Py_Initialize'
/home/miguellissimo/embedpy.c:8: undefined reference to `PyRun_SimpleStringFlags'
/home/miguellissimo/embedpy.c:11: undefined reference to `Py_Finalize'
collect2: error: ld returned 1 exit status
Я не могу узнать, что я делаю неправильно, или что я забыл, чтобы этот пример работал.
PS: Команда python2.7-конфигурации дает следующий вывод на моей машине Xubuntu:
>>> python2.7-config --cflags
-I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -fno-stri
ct-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=
4 -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-pr
ototypes
>>> python2.7-config --ldflags
-L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpthread -ldl -luti
l -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
Попробуйте включить '-I/usr/include/python2.7 -lpython2.7' в строку компиляции – kilojoules
первый из них уже существует и добавление -lpython2.7 в строку компиляции, похоже, ничего не делает. Он компилируется в объектный файл, как и раньше, но он не связан правильно. -lpython2.7 также уже добавлен во вторую команду gcc для связи – Miguellissimo
. Я смог связать C-программу python [здесь] (http://stackoverflow.com/questions/3286448/calling-a-python-method- из-CC-и-извлечения-ее-возвратного значение/24687260 # 24687260). Хотя это загружает модуль не целую программу, возможно, это поможет. – kilojoules