LOCAL_LDLIBS与LOCAL_LDFLAGS

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

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


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

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

  • 如何在Android中使用std :: stoul和std :: stoull?
  • Android中唯一的OpenGL游戏:在C ++(NDK)与Java(Dalvik)中的性能
  • 如何编写/debuggingNDK静态库Android.mk?
  • 适用于Android的uSTL或STLPort?
  • android ndk vs sdk - 如果function有关
  • 控制Android NDK中的编译器标志?
  • Android NDK - 只能用C / C ++编写
  • Android NDK安装问题
  • 目前可能没有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。