gpt4 book ai didi

python - 对 `PyString_FromString' 的 undefined reference

转载 作者:太空狗 更新时间:2023-10-29 23:59:39 25 4
gpt4 key购买 nike

我有这个 C 代码:

... [SNIP] ...
for(Node = Plugin.Head; Node != NULL; Node = Node->Next) {
//Create new python sub-interpreter
Node->Interpreter = Py_NewInterpreter();
if(Node->Interpreter == NULL) {
Die("Py_NewInterpreter() failed");
}

//Create path to plugins main source file
snprintf(Filename, FILENAME_MAX, "%s/main.py", Node->File);

//Convert filename to python string
PFilename = PyString_FromString(Filename);
if(PFilename == NULL) {
Die("PyString_FromString(%s) failed", Filename);
}

//Import plugin main source file
PModule = PyImport_Import(PFilename);
if(PModule == NULL) {
Die("PyImport_Import(%s) failed", Filename);
}

//Deallocate filename
Py_DECREF(PFilename);

//Get reference to onLoad function from module
PFunction = PyObject_GetAttrString(PModule, "onLoad");
if(PFunction == NULL) {
Die("PyObject_GetAttrString() failed");
}
}
... [SNIP] ...

编译时出现这个错误:

/tmp/ccXNmyPy.o: In function `LoadPlugins':
/home/alex/Code/Scribe/Scribe.c:693: undefined reference to `PyString_FromString'
collect2: error: ld returned 1 exit status

Python.h 包含在源文件的顶部。

我正在编译:

gcc -funwind-tables -rdynamic -I /usr/include/python2.7/ -g -o Scribe Scribe.c -lcurses `python-config --cflags` `python-config --ldflags` -Wall

我的代码基于 Python C-Api 文档,来自此处:

http://docs.python.org/2/c-api/

具体来说:

http://docs.python.org/2/c-api/string.html?highlight=pystring_fromstring#PyString_FromString

我不知道为什么会这样,哈尔普? =c

最佳答案

在 martineau 的帮助下解决了这个问题。

原来 python-config --cflagspython-config --ldflags 行生成的标志包括搜索路径中的 python3.3 包含目录和链接python3.3 库。

自然地,python3.3 不能很好地与 python2.7 C-API 一起工作,这就是导致此问题的原因。

我的解决方案是复制 python-config --cflagspython-config --ldflags 的输出并对其进行编辑,使其包含 python2.7 而不是 python3 .3 米:

-I/usr/include/python2.7 -I/usr/include/python2.7 -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2

-lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic

代替:

-I/usr/include/python3.3m -I/usr/include/python3.3m -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2

-lpthread -ldl -lutil -lm -lpython3.3m -Xlinker -export-dynamic

关于python - 对 `PyString_FromString' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com