LOCAL_LDLIBS与LOCAL_LDFLAGS

Android NDK指南解释了Adnroid.mk的两个variables,如下所示:

LOCAL_LDLIBS – 构build共享库或可执行文件时使用的附加链接器标志的列表。


LOCAL_LDFLAGS – 构build共享库或可执行文件时要使用的其他链接器标志的列表。

那么这两者有什么区别呢?

Solutions Collecting From Web of "LOCAL_LDLIBS与LOCAL_LDFLAGS"

目前可能没有function上的差异(或者这是文档中的一个小错误),但意图(根据这种命名variables的长期传统)是:

  • LOCAL_LDLIBS将指定库或至less要链接到结果的对象

  • LOCAL_LDFLAGS会为链接器指定其他configuration选项

主要区别如下:

  • LOCAL_LDFLAGS出现最终的链接器命令行上的目标文件和库的列表之前 ,这是您要放置影响链接器行为的实际“标志”的位置。

  • LOCAL_LDLIBS出现最终链接的命令行上的目标文件和库的列表之后 ,这是您要放置实际系统库依赖项的位置。

这种区别的存在是因为Unix上的静态链接工作的方式,即目标文件,静态库和共享库的顺序对于确定最终结果非常重要,有时候确保某些东西出现在另一个之前/之后。

最后,我build议遵循以下文档:

  • 将真正的链接器标志放入LOCAL_LDFLAGS中

  • 将系统库依赖项放入LOCAL_LDLIBS

  • 仅对系统库依赖性使用LOCAL_LDLIBS。 如果你想指向另一个库,最好将它们列在LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES中(即使这意味着为它们定义一个PREBUILT_XXX模块),因为这样可以让构build系统自动为你编写依赖关系并自动sorting。