我有一个关于在多个目录下使用非标准命名约定链接共享库的问题。我需要生成的可执行文件在可执行文件当前位置搜索共享库,但找不到命令行参数来强制执行此行为。
为了演示这种行为,只需要一个目录下的共享库。
gcc -shared mylib.c -o some/dir/mylib.so
gcc main.c -o main -Lsome/dir -l:mylib.so
可执行文件main给出以下 ldd 输出:
ldd main
some/dir/mylib.so (0xf76e2000)
我需要的输出是:
ldd main
mylib.so => some/dir/mylib.so (0xf7700000)
如果库按惯例命名为libmylib.so而不是mylib.so,则可以创建此输出,如下所示:
mv some/dir/mylib.so some/dir/libmylib.so
gcc main.c -o main -Lsome/dir -lmylib
这也会根据需要删除 ldd 列表中的路径some/dir。
我已经调查了 rpath 的使用,以及 ld 和 gcc 的命令行选项,但我无法找到令人满意的解决方案。在这种情况下,不能轻易更改非标准名称和目录结构的严格要求。
我的问题是如何通过 gcc 命令行选项强制库的依赖关系相对于当前目录,而不是像第二个 ldd 中那样绝对。
谢谢你的时间,我希望我已经合理地解释了这个问题。
乔恩。