我正在尝试用这个 MAKEFILE 构建 libavformat .虽然 makefile 包含 avio.o
文件,但它没有为头文件 url.h
上声明的函数添加任何符号.包含 avio.c, avio.h and url.h
的源文件夹文件可以找到HERE .avio.o
的 nm 命令返回nm: avio.o: File format not recognized
file
命令 avio.o
显示以下输出
avio.o: LLVM IR bitcode
我检查了生成的 libavformat.so 上的 nm 命令,并没有找到在 url.h
上声明的函数的任何符号。文件我已经坚持了两天了。无法弄清楚如何解决这个问题!
调用
ff_check_interrupt
方法和结果undefined reference to 'ff_check_interrupt'
配置和标志。
最佳答案
首先,url.h
声明的函数应在 url.c
中定义,不在 avio.c
中.
二是唯一使用ff_check_interrupt
在 avoi.c
位于静态内联函数中,因此工具链确实可能会优化此符号。
我认为您正在发生的事情是工具链决定仅在此编译单元中使用它。
移动 ff_check_interrupt
的定义到 'url.c' 应该可以解决问题。虽然这是一个图书馆,所以你无法控制。
然而,这并不能回答为什么 thousands of users on Github在他们的代码中有这个相同的库。我建议将您的 Makefile 与那些进行比较(例如,第一次搜索返回是 this one 。
关于android - 即使 MakeFile 包含其目标文件,也不会添加来自 C 文件的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65882949/