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

发布于 2024-10-14 15:25:54 字数 292 浏览 3 评论 0原文

我正在尝试将应用程序与 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦回梦里 2024-10-21 15:25:54
gcc ... -lsupport -lcpu -lsupport -lcpu

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

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

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

-> 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.

無處可尋 2024-10-21 15:25:54

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

Here is detailed explanation of why either repeating libraries or using --start/--end-group is required in this situation.

太阳公公是暖光 2024-10-21 15:25:54

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

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

You can normally specify a library more than once to get around this kind of problem, e.g.

$ gcc ... -lsupport -lcpu -lsupport ...
成熟稳重的好男人 2024-10-21 15:25:54

请注意, --start-group / --end-group 是编译器未知的链接器选项,因此如果您使用 gcc / g++ 对于链接,您应该将它们指定为:

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

否则您将得到:

gcc.exe:错误:无法识别的命令行选项“--start-group”

gcc.exe:错误:无法识别的命令行选项“--end-group”

Note that --start-group /  --end-group are linker options which are unknown to the compiler, so if you use gcc / g++ for linking, you should specify them as:

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

Otherwise you will get:

gcc.exe: error: unrecognized command-line option '--start-group'

gcc.exe: error: unrecognized command-line option '--end-group'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文