ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – Linux,静态lib引用可执行文件中的其他静态库

2019-08-27 12:39:20  阅读:176  来源: 互联网

标签:c linux linker static


我正在创建一个应用程序,它包含两个静态库和一个可执行文件.

让我们调用两个静态库:
libusefulclass.a
libcore.a

和申请:
MYAPP

libcore实例化并使用libusefulclass中定义的类(让我们称之为UsefulClass)

现在,如果我按以下方式链接应用程序:

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o -lusefulclass -lcore

链接器抱怨找不到libusefulclass中的方法:

undefined reference to `UsefulClass::foo()'

等等

我找到了一个解决方法:
如果UsefulClass也在可执行文件本身的源文件中实例化,则应用程序链接没有任何问题.

我的问题是:是否有更简洁的方法使libcore引用libusefulclass中定义的方法,或者静态库只是无法相互链接?

TIA

P.S.:如果重要:使用Qt在C中开发应用程序,但我觉得这不是Qt问题,而是一般的库问题.

解决方法:

您需要以依赖项的相反顺序指定库,因此请使用

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lcore -lusefulclass

如果存在循环依赖关系,您甚至可能需要两次指定库,

g++ -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.5.4/lib -o myapp src1.o src2.o srcN.o  -lusefulclass -lcore -lusefulclass

标签:c,linux,linker,static
来源: https://codeday.me/bug/20190827/1740997.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有