循环链接静态库(linux)未定义的库

发布于 2024-11-27 13:35:44 字数 370 浏览 0 评论 0原文

我对静态库进行了构建,然后将其放在一个位置。现在,当我构建源代码时,我会得到用于库间调用的UNDEFINED REFERENCES。例如:

/home/xyz/lib/libA.a(ClassA.a):对classB::funB()的未定义引用

classB.a也是一个静态库。

在我的源项目文件中,静态链接顺序是:

LIBS+=   -lclassB -lclassA

现在,当我反转库顺序时,我开始在库 B 的类中出现库 A 内函数调用的错误。

I did a build for static libraries and put then at a location. Now when i build my source i get UNDEFINED REFERENCES for inter library calls. For example:

/home/xyz/lib/libA.a(ClassA.a):undefined reference to classB::funB()

here classB.a is also a static library .

In my source's project file the static linking order is :

LIBS+=   -lclassB -lclassA

Now when i reverse the libraries order i start getting error in classes of library B for function calls inside library A.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

森末i 2024-12-04 13:35:44

对于这种情况,您通常需要例如

LIBS += -lclassA -lclassB -lclassA

链接 classA 库两次有助于解决循环依赖关系。

For this kind of situation you generally need e.g.

LIBS += -lclassA -lclassB -lclassA

Linking the classA library twice helps to resolve the circular dependencies.

沙沙粒小 2024-12-04 13:35:44

好的朋友我已经找到了解决方案。

我在 gcc 上使用 qmake 构建工具,我只需要告诉 qmake 我的一些静态库是循环依赖的。

所以我用 qmake 链接器标志修改了我的 .pro 文件

   QMAKE_LFLAGS += -Wl , --start-group --end-group

gcc 的文档说你需要将存档名称放在 --start-group --end-group 之间,但是 qmake 足够聪明,可以找出依赖的库,并且会这样做那个自动的。

玩得开心 。

Ok friends I have found the solution .

I was using qmake build tool on gcc , i just needeed to tell qmake that some of my static libraries are circularly dependent .

So i modified my .pro file with a qmake linker flag

   QMAKE_LFLAGS += -Wl , --start-group --end-group

gcc's documentation says that you need to put your archive names between --start-group --end-group , but qmake is smart enough to find out the dependent libs , and will do that automatically .

Have Fun .

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