作者:mobiledu2502894753 | 来源:互联网 | 2023-05-25 14:46
我发现在使用-rpath时必须给出-L标志.例如:
gcc -o test test.o -L. -lmylib -Wl,-rpath=.
为什么需要-L标志?编译时需要哪些信息比h文件中的信息多?
如果我删除-L.我收到以下消息:
gcc -o test test.o -lmylib -Wl,-rpath=.
/usr/bin/ld: cannot find -lmyLib
但是,删除这两个标志是完全可以的.像这样:
gcc -o test test.o -lmylib
前提是可以在/ usr/lib中找到libmyLib.为什么现在不需要-L?
这是/sf/ask/17360801/的后续问题.
1> OMGtechy..:
即使是动态库也需要一定程度的静态链接; 链接器需要知道动态库应该提供哪些符号.关键的区别在于动态库在运行时提供定义,而完全静态库在链接时提供定义.
因此,-L
需要指定要链接的文件的位置,就像-l
指定特定库一样.在.
表示当前目录.
-rpath
当应用程序尝试加载动态库时,它会在运行时发挥作用.在尝试加载动态库时,它会向程序通知要搜索的其他位置.
-L/usr/lib
不需要指定的原因是因为默认情况下链接器在那里查找(因为这是放置库的一个非常常见的地方).