GCC 中包含循环引用的链接库
我正在尝试将应用程序与 GCC 中的多个静态库链接。
有两个库会导致问题。 Libsupport 为应用程序提供了一个终端。它依赖 libcpu 来提供串行链接、定时和同步。 Libcpu 依赖 libsupport 来为串行数据等提供队列。
如果我在链接 libcpu 时先指定 libsupport 则无法与队列函数链接。是我指定libcpu第一个lib支持无法链接的串口链接(以及更多)功能。
看起来 GCC 只解析一个库一次并丢弃任何未使用的对象。
我可以要求 gcc 多次解析库或包含所有对象吗?
I am trying to link an application with multiple static libraries in GCC.
There are two libraries that cause problems. Libsupport provides a terminal for the application. It relies on libcpu to provide a serial link, timing and syncronisation. Libcpu relies on libsupport to provide queueing for serial data and more.
If I specify libsupport first when linking libcpu cannot be linked with the queue functions. Is I specify libcpu first lib support can not link the serial link (and more) functions.
It looks like GCC parses a library only once and discard any unused objects.
Can I ask gcc to parse libraries multiple times or to include all objects?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
->每次提及库都会导致解析其之前的库(但不一定是之后指定的库),这就是为什么您将来可能需要指定更多“-lsupport -lcpu”。
或者,尝试
--start-group -lsupport -lcpu --end-group
一次。-> Each mention of a library will cause resolution of libraries that came before it (but not necessarily ones specified afterwards), which is why you may need to specify more "-lsupport -lcpu" in future.
Alternatively, try
--start-group -lsupport -lcpu --end-group
once.这里详细解释了为什么重复库或使用
--start/-在这种情况下需要 -end-group
。Here is detailed explanation of why either repeating libraries or using
--start/--end-group
is required in this situation.您通常可以多次指定一个库来解决此类问题,例如
You can normally specify a library more than once to get around this kind of problem, e.g.
请注意,
--start-group
/--end-group
是编译器未知的链接器选项,因此如果您使用gcc
/g++
对于链接,您应该将它们指定为:否则您将得到:
Note that
--start-group
/--end-group
are linker options which are unknown to the compiler, so if you usegcc
/g++
for linking, you should specify them as:Otherwise you will get: