c++ - gcc/ld : what is to -Wl, 动态链接中的-rpath 什么是静态链接中的-l 到-L?

标签 c++ linux unix gcc ld

使用/my/dir/path/foo.a 和/my/dir/path/bar.a:

要使用 gcc/g++ 进行静态链接,可以使用 -L 指定包含静态库的目录,并使用 -l 指定库的名称。在这种情况下,可以编写 gcc -L/my/dir/path -lfoo -lbar ...

使用/my/dir/path/foo.so 和/my/dir/path/bar.so:

要使用 gcc/g++ 动态链接,可以使用 -Wl,-rpath,/my/dir/path。库的名称是如何指定的?命令 gcc -L/my/dir/path -Wl,-rpath,/my/dir/path -lfoo -lbar ... 正确吗?还是应该是 gcc -L/my/dir/path -Wl,-rpath,/my/dir/path -Wl,-lfoo -Wl,-lbar ...?换句话说,库名称是否需要通过 -Wl,-l 传递给链接器?

最佳答案

-l参数适用于静态库和共享库,但期望指定库的文件名采用特定格式。即 -lfoo告诉链接器查找名为 libfoo.a 的文件或 libfoo.so .如果你想链接到一个文件名没有这个“lib”前缀的库(即 foo.so ),你可以使用分号并指定一个文件名:-l:foo.so .

因此,动态链接 /my/dir/path/foo.so/my/dir/path/bar.so您需要发出以下命令:

g++ -L/my/dir/path/ -l:foo.so -l:bar.so

至于-rpath , 它有 -rpath=<path>格式,因此为了将其传递给链接,您需要执行以下操作:

g++ -L/my/dir/path/ -Wl,-rpath=/my/dir/path/ -l:foo.so -l:bar.so

关于c++ - gcc/ld : what is to -Wl, 动态链接中的-rpath 什么是静态链接中的-l 到-L?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373851/

相关文章:

c++ - 将 `nullptr` 分配给 `bool` 类型。哪个编译器是正确的?

linux - 如何使用 Unix CAT 和查找插入新行

linux - awk 命令问题以识别定界符

linux - 如何用awk正确拆分

shell - 如何在不使用 winscp/任何工具的情况下将压缩文件夹从桌面传输到 unix 服务器?

linux - 我怎样才能在 cat/etc/passwd 上将一行剪成两行?

c# - 未从 C# 中找到 C++ COM DLL 中的导出函数

c++ - 对于 C++,是否有两次从控制台中的 txt 文件重定向(cin)输入?

c++ - 如何为 C++ 内置的 Windows 服务创建安装程序

linux - 使用 bash 脚本使用 valgrind 检查内存