加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – g相对路径

发布时间:2020-12-16 06:56:21 所属栏目:百科 来源:网络整理
导读:我正在尝试使用g设计一个共享库的共享库,希望将来简化我的编译脚本并简化我的更新过程,但我仍然是最好的GNU工具和编写库的新手.任何人都可以提供关于g是否可以使用以下想法的建议? 为方便起见,请考虑以下文件系统布局: main.cpplibraryX/libraryX/libX.sol
我正在尝试使用g设计一个共享库的共享库,希望将来简化我的编译脚本并简化我的更新过程,但我仍然是最好的GNU工具和编写库的新手.任何人都可以提供关于g是否可以使用以下想法的建议?

为方便起见,请考虑以下文件系统布局:

main.cpp
libraryX/
libraryX/libX.so
libraryX/libraryY/
libraryX/libraryY/libY.so
libraryX/libraryZ/
libraryX/libraryZ/libZ.so

我的目标是能够使用级联相对路径间接链接.例如,main.cpp链接到libraryX / libX.so,它链接到libraryY / libY.so和libraryZ / libZ.so.是否可以只将main.cpp链接到libX.so并使用libY.so和libZ.so中定义的函数?

如果是这样,你能提供一个需要这样做的标志的例子吗?我一直在尝试使用谷歌的各种来源的以下命令的变体无济于事:

g++ -shared -fPIC -Wl-rpath=libraryX -LlibraryX -lX.so main.o -o executable

非常感谢任何指导或参考.

解决方法

不要这样做(即使你可以弄清楚如何).

当您链接-lX时,静态链接器必须知道“此链接的一部分”的所有其他共享库.由于-lY不在链接行上,静态链接器会给你一个错误,或者它必须以某种方式找出libY.so的来源.对于后者,它必须复制运行时加载程序将执行的RPATH搜索.此复制容易出错(静态链接器可能不使用完全相同的算法)并且最好避免.

最后,您的命令行完全错误:-shared意味着您要求链接器提供共享库,但您显然是在尝试链接可执行文件.链接可执行文件时通常不应使用-fPIC.另外,-Wl-rpath = …应该是-Wl,-rpath = …(逗号很重要).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读