使用/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/