将函数添加到libbluray并在包含的示例中测试它时,make只为添加的函数生成“未定义的引用”,header中的其他函数工作正常。
确切的变化如下:
src/libbluray/bluray.c:
+void do_stuff()
+{
+ //nothing
+}
src/libbluray/bluray.h:
+void do_stuff(void);
src/examples/index_dump.c:
int main(int argc, const char *argv[])
{
+
+ do_stuff();
+
出错:
/usr/bin/ld: src/examples/index_dump.o: in function `main':
.../libbluray/src/examples/index_dump.c:66: undefined reference to `do_stuff'
索引转储.c仅包括
#include <stdio.h>
#include "bluray.h"
这太让人困惑了。
此外,
fgrep do_stuff .libs/libbluray.so
还显示do_stuff
在对象文件中。 最佳答案
libbluray中的Makefile.am
包含以下内容(包装在此处):
libbluray_la_LDFLAGS= -no-undefined -version-info $(LT_VERSION_INFO) \
-export-symbols-regex "^bd_"
因此,仅从库中导出以
bd_
开头的符号。符号do_stuff
与此正则表达式不匹配,因此它不会导出并在库外部可见。您的
fgrep
检查可能从调试信息或常规符号表(.symtab
,而不是.dynsym
中的动态符号表)中获取符号名。关于c - 向libbluray添加功能时 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55203233/