【问题标题】:Android NDK:undefined reference to ' 'Android NDK:未定义对“”的引用
【发布时间】:2012-07-18 16:25:00
【问题描述】:

我正在尝试构建 g729 编解码器的库文件。我有此编解码器的源代码并尝试使用 Android NDK 构建。
几乎所有目标文件都已构建,但最后我收到此错误。
但我被这个错误困住了。谁能解释这个错误的含义,我应该怎么做才能解决这个问题?

./obj/local/armeabi-v7a/objs/g729_jni/g729/cod_ld8a.o: In function `Coder_ld8a':
/root/g729/jni/g729/cod_ld8a.c:267: undefined reference to `Pitch_ol_fast'
/root/g729/jni/g729/cod_ld8a.c:325: undefined reference to `Pitch_fr3_fast'
/root/g729/jni/g729/cod_ld8a.c:328: undefined reference to `Enc_lag3'
/root/g729/jni/g729/cod_ld8a.c:344: undefined reference to `G_pitch'
collect2: ld returned 1 exit status

谢谢

编辑 我已经解决了这个错误,但是是否可行? 我在 Android.mk 中添加了这一行

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

【问题讨论】:

  • “未定义的引用”是链接器错误。您可能忘记在命令行中传递要链接的库。
  • 好的,你能告诉我如何使用 NDK 在命令行中传递库吗?
  • 对不起,我根本不知道 NDK。可能和往常一样,-l<name> 其中<name> 是库的名称。您缺少哪个库,不知道。但是,如果 NDK 是/包含一种集成构建系统或 IDE,您将不会通过命令行调用编译器,而是会在某个项目文件中列出该库。
  • 啊,感谢您的解释,但在这里,我什至无法理解我缺少哪个库文件!

标签: c++ c android-ndk linker-errors ld


【解决方案1】:

如果您正在编译源代码并且想要链接生成的库,您可以在 Android.mk 文件中使用以下变量之一

LOCAL_STATIC_LIBRARIES: 静态库模块列表(使用 BUILD_STATIC_LIBRARY 构建) 应该链接到这个模块。这仅在 共享库模块。

LOCAL_SHARED_LIBRARIES: 此模块在运行时依赖的共享库列表modules。 这在链接时是必要的并嵌入相应的信息 在生成的文件中。

有关更多详细信息,请查看 ndk 文件夹中的 android NDK 文档。

否则,如果您必须链接预构建库,Android NDK 文档中有一个部分会告诉您如何实现结果。这些文档的在线版本也是here(PREBUILTS)

2017 年 9 月 1 日更新

关于预建库的文档可以在here找到

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 2017-01-12
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多