gcc / ld:什么是-Wl,-rpath在静态链接中动态链接什么-l到-L?

时间:2015-10-27 16:49:33

标签: 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

将库名称传递给链接器

1 个答案:

答案 0 :(得分:6)

finalHandler参数适用于静态库和共享库,但要求指定库的文件名采用特定格式。即,-l告诉链接器查找名为-lfoolibfoo.a的文件。如果你想链接一个文件名不具备这个' lib'前缀(即例如libfoo.so),您可以使用分号并指定文件名: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>