LOCAL_LDLIBS不起作用,但LOCAL_LDFLAGS有效。为什么?

时间:2014-03-31 08:03:06

标签: 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也适用。

1 个答案:

答案 0 :(得分:1)

我没有明确的答案,但我最近在解决同样的问题,这是我的发现。希望有人会验证。

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

LOCAL_LDLIBS希望找到最终的库。

他们都在SDK和NDK下工作。

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

即。在组件文件夹内部构建时(在我的情况下为cameraHAL) mm showcommands(首先在main文件夹中执行.build / envsetup.sh),link命令没有指示为LOCAL_LDLIBS指定的任何内容。

为什么?

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

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

LOCAL_LDLIBS仅用于链接库,仅用于NDK / SDK。