【问题标题】:Building standalone libraries构建独立库
【发布时间】:2015-12-11 22:13:43
【问题描述】:

我正在尝试将一个大项目交叉编译到 android(太大而无法将其移植到 ndk-build 格式)。我来自 Java 世界,所以我对所有这些编译、C、C++ 都很陌生。事情是这样的:

这个大项目使用 xerces-c 作为库,当时它依赖于 ICU 转码器。我已经对它们进行了交叉编译,生成了 libxerces-c.a、libicuuc.a 和 libicudata.a

当我交叉编译我的大项目时,配置会检查头文件(它们是)和 xerces-c 库。但是,当我运行 make 命令时,执行失败,因为 -licuuc -licudata 不在编译命令上。

有没有办法创建一个包含 libicuuc 和 libicudata 的独立 libxerces-c?我可以在 CFLAGS、CXXFLAGS 或 LDFLAGS 中包含一些标志?配置脚本上的一些参数?

由于我对此很陌生,所以举个例子会很有用。 提前感谢您的帮助

【问题讨论】:

  • 只为链接器指定所需的附加库有什么问题?
  • 我需要更改 makefile(几个)并且这发生在 9 个库中。不仅仅是 xerces-c 所以最后我得到了 1000 -l 标志。我只是想知道是否有任何方法可以节省更改 20K 行配置和生成文件的所有时间
  • 编译器/链接器标志是特定于实现的。可能有一种方法可以实现您的要求,但这取决于您的(交叉)编译器。
  • 另外,您提到configure 脚本表明您可能拥有基于 Autoconf 的构建系统。如果是这样,那么您也许可以在少量(ish)configure.acconfigure.in 文件中进行更改,以将所需的库添加到链接中。如果构建系统也使用 Automake,那几乎可以肯定。
  • 或者作为另一种选择,尝试运行configure --help。至少使用 Autotools 构建系统,它会为您提供有关所有选项和变量的信息,您可以调整以调整构建行为。其中一些是基于 Autotools 的构建系统的标准配置;其他的可能是项目特定的。

标签: android c++ c cross-compiling


【解决方案1】:

在 Makefiles 中,您可以定义要在所有命令行中使用的表达式。如果您正确使用此工具,您可以对任意数量(或少数)文件使用相同的命令。在您从其他项目中看到的 Makefiles 中,您会看到人们通常将 CFLAGS 用于 C 编译器的(惊喜)标志和选项,将 LIBS 用于链接器,但您可以为宏使用任何您喜欢的名称。

您还可以定义要操作的文件列表以及它们所依赖的文件。

在 Linux 上,一些软件包还安装了一个配置文件,可以使用名为 pkg-config 的应用程序来查找该软件包的所有标志和库选项。这避免了将显式路径硬连线到 Makefile 中。

这里有几个教程:

Simple tutorial.

Another intro

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2011-08-10
    相关资源
    最近更新 更多