链接时报告错误“undefined reference to ...”的原因
(2016-11-24 16:31:37)
标签:
编译链接undefinedreferenceto |
分类: C |
在C语言中,用 Embed 方式调用 Python
程序。编译正常。链接时报告错误“undefined reference to `Py_Initialize' ”。“undefined
reference to ...”
是一个常见错误,一般来讲,其原因是在链接命令行中列出的链接库没有定义指定接口(函数,此处为`Py_Initialize'
)。于是,在调用路径,链接函数中反复核查,路径没有错,用nm命令查看Python3.4.so,也找到了相关函数符号的定义 'Py_Initialize'
。但make最后的链接操作就是报告错误“undefined reference to `Py_Initialize'
。昨夜折腾到两点,仍然不明就里。
今日继续,终于,在网上看到一句话“对于-l
使用库的要求是:越是基础的库越要写在后面,无论是静态还动态”。这个很好理解,*.o,*.a,*.so,这些目标文件相互之间的确是存在依赖关系的,应该“向后找”。
于是,修改makefile:将“$(CC) $(LDFLAGS) -o $@ $^ ” 改为
“$(CC) $^ $(LDFLAGS) -o
$@”(我们自己写的程序当然是最高级的,应该放到最前面)。一点小的错误耽搁这么长时间,郁闷。
前一篇:Linux内核源代码目录结构
后一篇:linux下清理系统垃圾