Cal*_*laf 1 c++ unix linux gcc ld
使用/my/dir/path/foo.a和/my/dir/path/bar.a:
静态链接使用gcc /克++,一个使用-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
Run Code Online (Sandbox Code Playgroud)
至于-rpath它有-rpath=<path>格式,所以为了将它传递给链接你需要问题如下:
g++ -L/my/dir/path/ -Wl,-rpath=/my/dir/path/ -l:foo.so -l:bar.so
Run Code Online (Sandbox Code Playgroud)