链接在GCC中包含循环引用的库

时间:2011-01-26 08:42:50

标签: gcc linker static-libraries

我正在尝试将应用程序与GCC中的多个静态库链接。

有两个库会导致问题。 Libsupport为应用程序提供终端。它依赖于libcpu来提供串行链路,定时和同步。 Libcpu依靠libsupport为串行数据提供排队等等。

如果我在链接libcpu时首先指定libsupport,则无法与队列函数链接。我是否指定libcpu第一个lib支持无法链接串行链接(以及更多)函数。

看起来GCC只解析一次库并丢弃任何未使用的对象。

我可以让gcc多次解析库或包含所有对象吗?

3 个答案:

答案 0 :(得分:9)

gcc ... -lsupport -lcpu -lsupport -lcpu

- >每次提到一个库都会导致它之前的库被解析(但不一定是之后指定的库),这就是为什么你将来可能需要指定更多的“-lsupport -lcpu”。

或者,请尝试--start-group -lsupport -lcpu --end-group一次。

答案 1 :(得分:6)

Here详细解释了为什么在这种情况下需要重复库或使用--start/--end-group

答案 2 :(得分:2)

您通常可以多次指定一个库以解决此类问题,例如

$ gcc ... -lsupport -lcpu -lsupport ...