Linking Libraries that contain circular references in GCC

狂风中的少年 提交于 2019-12-07 05:21:43

问题


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?


回答1:


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.




回答2:


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




回答3:


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

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


来源:https://stackoverflow.com/questions/4802624/linking-libraries-that-contain-circular-references-in-gcc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!