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

rkue9o1l  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(137)

我正在尝试在GCC中链接一个应用程序与多个静态库。
有两个库会引起问题。Libsupport为应用程序提供一个终端。它依赖libcpu来提供串行链接、定时和同步。Libcpu依赖libsupport来提供串行数据的排队和其他功能。
如果我指定libsupport第一个链接时,libcpu不能链接队列函数。如果我指定libcpu第一个链接时,lib支持不能链接串行链接(以及更多)函数。
看起来GCC只解析一次库,并丢弃所有未使用的对象。
我可以要求gcc多次解析库或包含所有对象吗?

zpjtge22

zpjtge221#

gcc ... -lsupport -lcpu -lsupport -lcpu
  • 〉每次提到一个库都会导致解析在它之前出现的库(但不一定是在它之后指定的库),这就是为什么将来可能需要指定更多的“-lsupport -lcpu”。
    或者,尝试--start-group -lsupport -lcpu --end-group一次。
djp7away

djp7away2#

Here详细解释了在这种情况下需要重复库或使用--start/--end-group的原因。

fnx2tebb

fnx2tebb3#

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

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

wtlkbnrh4#

注意--start-group/ --end-group是编译器未知的链接器选项,因此如果使用gcc/g++进行链接,则应将其指定为:

gcc ... -Wl,--start-group -lsupport -lcpu -Wl,--end-group

否则,您将获得:
gcc.exe:错误:无法识别的命令行选项“--start-group”
gcc.exe:错误:无法识别的命令行选项“--end-group”

相关问题