指示gnu make仅使用静态库

时间:2015-10-09 13:54:21

标签: android c++ c compilation makefile

这是我想要做的:

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

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

问题1 :搜索后我发现有两种类型的动态和静态库。我的问题是,我是否必须提供静态库,或者是否能够以某种方式从头文件中编译它们的gcc工具链?

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

1 个答案:

答案 0 :(得分:1)

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

通常情况下,我们使用他们的构建脚本单独构建第三方库(其中一些涉及独立工具链,其他人可能使用CMake进行配置,而其他人以及随着Android平台越来越流行,他们的共享会增加 - 提供 Android.mk 构建脚本,并使用方便的SELECT * FROM messages m, (Select * FROM message_threads ORDER BY message_threads.last_updated, message_threads.thread_id LIMIT 30) t WHERE m.thread_id = t.thread_id ORDER BY t.last_updated, t.thread_id, m.message_date; 命令进行编译。

无论如何,使用这些库的应用必须包含对所有这些库的显式引用,通常是将ndk-build添加到其 Android.mk 。但是如果一个目录中有许多库,则可以使用gnu-make通配符,例如

include $(PREBUILT_STATIC_LIBRARY)