gpt4 book ai didi

c++ - g++ 相对路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:52 28 4
gpt4 key购买 nike

我正在尝试使用 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 中定义的函数?

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

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

非常感谢任何指导或引用。

最佳答案

不要这样做(即使您知道怎么做)。

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

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

关于c++ - g++ 相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com