我正在尝试在GCC中链接一个应用程序与多个静态库。有两个库会引起问题。Libsupport为应用程序提供一个终端。它依赖libcpu来提供串行链接、定时和同步。Libcpu依赖libsupport来提供串行数据的排队和其他功能。如果我指定libsupport第一个链接时,libcpu不能链接队列函数。如果我指定libcpu第一个链接时,lib支持不能链接串行链接(以及更多)函数。看起来GCC只解析一次库,并丢弃所有未使用的对象。我可以要求gcc多次解析库或包含所有对象吗?
zpjtge221#
gcc ... -lsupport -lcpu -lsupport -lcpu
--start-group -lsupport -lcpu --end-group
djp7away2#
Here详细解释了在这种情况下需要重复库或使用--start/--end-group的原因。
--start/--end-group
fnx2tebb3#
您通常可以多次指定一个库来解决此类问题,例如:
$ gcc ... -lsupport -lcpu -lsupport ...
wtlkbnrh4#
注意--start-group/ --end-group是编译器未知的链接器选项,因此如果使用gcc/g++进行链接,则应将其指定为:
--start-group
--end-group
gcc
g++
gcc ... -Wl,--start-group -lsupport -lcpu -Wl,--end-group
否则,您将获得:gcc.exe:错误:无法识别的命令行选项“--start-group”gcc.exe:错误:无法识别的命令行选项“--end-group”
4条答案
按热度按时间zpjtge221#
或者,尝试
--start-group -lsupport -lcpu --end-group
一次。djp7away2#
Here详细解释了在这种情况下需要重复库或使用
--start/--end-group
的原因。fnx2tebb3#
您通常可以多次指定一个库来解决此类问题,例如:
wtlkbnrh4#
注意
--start-group
/--end-group
是编译器未知的链接器选项,因此如果使用gcc
/g++
进行链接,则应将其指定为:否则,您将获得:
gcc.exe:错误:无法识别的命令行选项“--start-group”
gcc.exe:错误:无法识别的命令行选项“--end-group”