g ++相对路径

时间:2011-05-08 07:07:23

标签: c++ g++ shared-libraries

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:1)

不要这样做(即使你能弄清楚如何)。

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

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

相关问题