【问题标题】:Instruct gnu make to use only static libraries指示 gnu make 只使用静态库
【发布时间】:2015-10-09 13:54:20
【问题描述】:

这是我想做的:

有一个用 c/c++ 编写的项目,我想编译并部署到 Android 设备上。

我希望这个项目引用的每个库都静态链接到整个编译,这样我就可以获得一个自包含的二进制文件(或其中的几个)。

问题一:经过搜索发现,库或多或少有两种,动态的和静态的。我的问题是,我必须提供静态库还是 gcc 工具链能够以某种方式从头文件中编译它们?

问题 2:在搜索静态链接时,我只发现了仅对有限数量的库和目标文件使用标志的示例。我想要一个递归函数。那就是“为项目中的每个库引用链接它的静态版本。如果没有这样的版本,编译并链接它(这可能吗?)

【问题讨论】:

    标签: android c++ c compilation makefile


    【解决方案1】:

    无法从标头编译库。你需要你需要的所有库的来源。通常,此类源带有它们的构建脚本,并且这些脚本可能允许选择静态或共享目标。不幸的是,在某些情况下,仅支持一种目标类型。

    通常,我们使用它们的构建脚本单独构建第三方库(有些涉及独立的工具链,有些可能使用 CMake 进行配置,还有一些 - 随着 Android 平台的普及,它们的份额也在增加 -提供Android.mk构建脚本,使用方便的ndk-build命令编译。

    无论如何,使用这些库的应用程序必须包含对所有这些库的显式引用,通常通过在其 Android.mk 中添加 include $(PREBUILT_STATIC_LIBRARY)。但是如果你在一个目录中有很多库,你可以使用 gnu-make 通配符,例如

    LOCAL_LDLIBS += -Ljni/libs $(patsubst jni/libs/lib%.a,-l%,$(wildcard jni/libs/lib*.a))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多