【问题标题】:Reference undefined to functions in python-dev header对 python-dev 标头中的函数的引用未定义
【发布时间】:2015-05-04 21:32:35
【问题描述】:

我正在尝试将一些 Python 代码嵌入到 C 中;这是我第一次做这样的事情。

这是我第一次尝试由互联网指南复制的简单代码:

#include <Python.h>
void exec_pycode(const char* code)
{
  Py_Initialize();
  PyRun_SimpleString(code);
  Py_Finalize();
}

int main(int argc, char **argv) {
    exec_pycode(argv[1]);
    return 0;
}

所以我已经安装了 python3.4-dev 包。

然后获取我输入的链接器的信息:

pkg-config --cflags --libs python3

然后我尝试编译我的代码:

gcc -std=c99 -o main -I /usr/local/include/python3.4m  -L /usr/local/lib -lpython3.4m main.c

(根据之前的命令)

但这是结果:

/tmp/ccJFmdcr.o: in function "exec_pycode":
main.c:(.text+0xd): reference undefined to "Py_Initialize"
main.c:(.text+0x1e): reference undefined to "PyRun_SimpleStringFlags"
main.c:(.text+0x23): reference undefined to "Py_Finalize"
collect2: error: ld returned 1 exit status

似乎链接阶段存在问题,但看到我已将标头和库的确切路径传递给链接器,我无法理解问题出在哪里。我该如何解决这个问题?

【问题讨论】:

    标签: python c gcc linker


    【解决方案1】:

    尝试重新排序您的编译命令,以便在您的 C 源文件之后指定所有链接选项:

    gcc -std=c99 -o main -I /usr/local/include/python3.4m main.c \
      -L /usr/local/lib -lpython3.4m
    

    【讨论】:

    • 是的,我已经解决了之前的问题,但现在我遇到了这个问题:/usr/local/lib/libpython3.4m.a(pytime.o): in function "_PyTime_ObjectToTime_t": /home /matteo/Scrivania/Python-3.4.3/Python/pytime.c:212:未定义引用“ceil” /home/matteo/Scrivania/Python-3.4.3/Python/pytime.c:214:未定义引用“ floor”/usr/local/lib/libpython3.4m.a(pytime.o):在函数“_PyTime_ObjectToDenominator”中:/home/matteo/Scrivania/Python-3.4.3/Python/pytime.c:173:未定义引用“ceil” ...(和所有其他数学函数)所以我尝试重新编译添加 -lm 但我没有解决问题:/
    • @MatteoArella 你在哪里添加-lm?尝试几个不同的地方 - 在-lpython3.4m 之前和之后,看看哪个有效。如果两者都不起作用,请尝试在终端中运行 python-config --ldflags 并将其用作链接器标志。
    • 请注意,您可能必须更改 python-config 输出中的标志顺序 - 如果它不起作用,请尝试在所有 -L 标志之后和所有 @987654328 之前移动 -lpython3.4m @标志。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2018-04-12
    • 2015-05-05
    • 2019-09-05
    • 2011-09-19
    相关资源
    最近更新 更多