gpt4 book ai didi

c - 向 libbluray 添加函数时 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:59 25 4
gpt4 key购买 nike

将函数添加到 libbluray 并在包含的示例中对其进行测试时,make 仅为添加的函数生成“ undefined reference ”, 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'

index_dump.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/

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