android - LOCAL_LDLIBS 不起作用,但 LOCAL_LDFLAGS 起作用。为什么?

标签 android linker makefile dynamic-linking android-make

我试图在我的应用程序中包含 liblog 以使用 android 日志打印。

我尝试将它包含在 LOCAL_LDLIBS

LOCAL_LDLIBS := -llog

它不起作用。我收到以下错误:

error: undefined reference to '__android_log_print'

我看到很少有应用使用 LOCAL_LDFLAGS。我试过了,它奏效了。为什么? LOCAL_SHARED_LIBRARIES 也可以正常工作。

最佳答案

我没有明确的答案,但我最近遇到了同样的问题,这是我的发现。希望有人来验证。

LOCAL_LDLIBS 和 LOCAL_SHARED_LIBRARIES 都用于链接库。 但是,LOCAL_SHARED_LIBRARIES 正在寻找中间对象,如果找不到,则正在重建库。

LOCAL_LDLIBS 期望找到最终的库。

它们都在 SDK 和 NDK 下工作。

我在构建 android 平台时遇到了 LOCAL_LDLIBS 无法工作的问题,或者更具体地说是它的组件之一,相机。 LOCAL_LDLIBS 不起作用的原因是它根本没有出现在链接命令中。

即当你在组件文件夹中构建时(在我的例子中是 cameraHAL) mm showcommands(首先在主文件夹中执行 .build/envsetup.sh),链接命令没有指示为 LOCAL_LDLIBS 指定的任何内容。

这是为什么?

我相信逻辑是,在构建 android 时,您应该拥有所有源,因此使用 LOCAL_SHARED_LIBRARIES 是正确的方法。

LOCAL_LDFLAGS 与 LOCAL_LDLIBS。 LOCAL_LDFLAGS 用于传递任何标志,而不仅仅是要链接的库,因此它出现在链接命令中。

LOCAL_LDLIBS 仅用于链接库,并且只能在 NDK/SDK 下使用。

关于android - LOCAL_LDLIBS 不起作用,但 LOCAL_LDFLAGS 起作用。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756435/

相关文章:

makefile - 如何在整个 Makefile 运行中重用包含时间戳的变量

android - 在 Google Play 上为 Android 订阅启用免费试用

c++ - 如何解决链接器错误 "cannot find -lgcc_s"

c++ - 我应该在哪里使用 automake/autoconf 项目解决符号查找/ undefined symbol ?

gcc - 对 _GLOBAL_OFFSET_TABLE_ 的 undefined reference (仅在生成二进制文件时)

git - 带有绝对路径的 Makefile 和 Git

c++ - 如何在 Makefile 中定义 C++ 预处理器变量

android - Android 自动对焦后的视频录制问题

android - 火力地堡不工作。安卓

java - 使用广播接收器的结果错误