LOCAL_LDLIBS与LOCAL_LDFLAGS

Bar*_*uch 7 android android-ndk

Android NDK指南解释了以下两个变量Adnroid.mk:

LOCAL_LDLIBS - 构建共享库或可执行文件时要使用的其他链接器标志的列表.
...


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

那么这两者有什么区别?

Dig*_*git 8

主要区别如下:

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

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

由于静态链接在Unix上的工作方式存在差异,即目标文件,静态库和共享库的顺序对于确定最终结果非常重要,有时您确实要确保某些内容出现在另一个之前/之后.

最后,我建议遵循文档,即:

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

  • 将系统库依赖项放入LOCAL_LDLIBS

  • 仅将LOCAL_LDLIBS用于系统库依赖项.如果要指向另一个库,最好将它们列在LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES中(即使这意味着为它们定义PREBUILT_XXX模块),因为这样可以让构建系统自动为您计算依赖关系并自动排序.


Chr*_*ton 5

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

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

  • LOCAL_LDFLAGS将为链接器指定其他配置选项