我发现-L
使用 -rpath
时必须给出标志.例如:
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
现在需要吗?这是 https://stackoverflow.com/a/8482308/1091780 的后续问题.
最佳答案
即使是动态库也需要一定程度的静态链接;链接器需要知道动态库应该提供哪些符号。关键区别在于动态库在运行时提供定义,而完全静态库在链接时提供定义。
为此,-L
需要指定要链接的文件的位置,就像 -l
指定特定的库。 .
表示当前目录。-rpath
在运行时开始发挥作用,当应用程序尝试加载动态库时。当尝试加载动态库时,它会通知程序要搜索的附加位置。
原因-L/usr/lib
不需要指定是因为链接器默认在那里查找(因为这是放置库的非常常见的地方)。
关于gcc - 为什么在使用 -rpath 时需要 -L?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096133/