【发布时间】:2018-10-05 05:50:00
【问题描述】:
我正在发布一个多平台库,它可以在除 Linux 之外的任何地方运行。可能有一种方法可以满足我的需要,但我没有看到它,希望这里有人可以提供帮助。
我的库包含两个项目,Windows 上的“subLibrary.lib”和“library.lib”(例如)。我构建“子库”,然后将其链接到“库”以进行分发。消费者只需链接“库”即可获取所有内容,包括“子库”中的内容。
所有其他平台的工作方式都相同——我发布了一个巨大的“library.a”,其中包含所有内容,消费者与之链接,无需了解任何较低级别的依赖项。
在 Linux 上构建标准可执行文件时,我的链接命令不仅必须指定 'library.a',还必须指定它的 每个 依赖项。这是因为中间库会留下未解析的符号,直到以后。
我想做的是使其与其他平台相同,因此使用的可执行文件只需与“library.a”链接,并且该库包含它需要的所有内容。
我知道这会使库变得更大,但这是确保每个人都能解决依赖关系和构建时间的唯一方法。
【问题讨论】:
-
在 Windows 和 Linux 上都不能将静态库链接到另一个静态库。您可以使用
ar工具或类似工具来构建两个库的串联,但这不是链接。 -
对于 Windows 上的类似工具,请参阅 stackoverflow.com/questions/13492365/… 和 msdn.microsoft.com/en-us/library/7ykb2k5f.aspx
标签: c++ linux c++11 ld libtool