LOCAL_LDLIBS与LOCAL_LDFLAGS

问题描述:

而Android NDK指南解释了Adnroid.mk两个变量如下:LOCAL_LDLIBS与LOCAL_LDFLAGS

LOCAL_LDLIBS - 额外的连接器选项列表构建共享库或可执行文件时使用。
...


LOCAL_LDFLAGS - 其他连接器选项列表构建共享库或可执行文件时使用。
...

那么究竟是什么这两者之间的区别?

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

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

  • LOCAL_LDFLAGS将指定其他配置选项给连接器

的主要区别有以下几点:

  • LOCAL_LDFLAGS出现目标文件和库最终链接器命令行的名单,这是你想要把影响实际的“标志”链接器行为。

  • LOCAL_LDLIBS出现最终链接的命令行上的目标文件和库的列表,这是你想要把实际的系统库依赖关系的地方。

的区别存在的,因为静态链接于Unix的方式,即目标文件,静态库的顺序和共享库是非常重要的,以确定最终的结果,有时候你真的以确保出现的东西之前/之后。

最后,我建议您按照文件,即:

  • 把真正的连接标志为LOCAL_LDFLAGS

  • 认沽系统函数库的依赖到LOCAL_LDLIBS

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

+0

我需要在库列表中使用'--start-group' /'--end-group'选项。我最终把它们放在'LOCAL_LDFLAGS'中,它可以工作,但根据您的输入可能会将它们移动到'LOCAL_LDLIBS' – baruch