android - 即使 MakeFile 包含其目标文件,也不会添加来自 C 文件的符号

标签 android c makefile ffmpeg android-ndk

我正在尝试用这个 MAKEFILE 构建 libavformat .虽然 makefile 包含 avio.o文件,但它没有为头文件 url.h 上声明的函数添加任何符号.包含 avio.c, avio.h and url.h 的源文件夹文件可以找到HERE .avio.o 的 nm 命令返回nm: avio.o: File format not recognizedfile命令 avio.o显示以下输出

avio.o: LLVM IR bitcode
我检查了生成的 libavformat.so 上的 nm 命令,并没有找到在 url.h 上声明的函数的任何符号。文件
我已经坚持了两天了。无法弄清楚如何解决这个问题!
调用ff_check_interrupt方法和结果

undefined reference to 'ff_check_interrupt'


配置和标志。
  • FFmpeg 配置文件:Config.h
  • FFmpeg 根 MakeFile:Root MakeFile
  • CC、CXX、CFLAGS、LDFLAGS:FLAGS
  • 最佳答案

    首先,url.h 声明的函数应在 url.c 中定义,不在 avio.c 中.
    二是唯一使用ff_check_interruptavoi.c位于静态内联函数中,因此工具链确实可能会优化此符号。
    我认为您正在发生的事情是工具链决定仅在此编译单元中使用它。
    移动 ff_check_interrupt 的定义到 'url.c' 应该可以解决问题。虽然这是一个图书馆,所以你无法控制。
    然而,这并不能回答为什么 thousands of users on Github在他们的代码中有这个相同的库。我建议将您的 Makefile 与那些进行比较(例如,第一次搜索返回是 this one

    关于android - 即使 MakeFile 包含其目标文件,也不会添加来自 C 文件的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65882949/

    相关文章:

    php - PHP 是如何实现它的 all fit container `array` 的?

    linux - 有充分的理由不利用 makefile 顶部的 '#!/bin/make -f' 来提供可执行的 makefile 吗?

    android - 无法从包外部访问电话验证卡

    android - 如何使 .getCurrentUser() 返回非空?

    android - "Cannot draw recycled bitmaps" picasso 异常

    android - 为 android/ios 构建同步服务?

    c - 段错误错误

    c - 为什么在写入使用字符串初始化的 "char *s"时会出现段错误,而不是 "char s[]"?

    c - Eclipse:我可以运行程序但无法调试它

    linux - kvm Makefile 中的 CFLAGS_vmx 是什么意思?