我正在尝试使用 ld
的选项 -l:/path/to/library
编译一个程序,但是在一台计算机上 ld
设法找到图书馆,但在另一个图书馆找不到。
我发现问题是在第二台计算机中,ld
将路径添加到给定计算机的开头,但我不明白为什么这样做。
有没有人能解决这个问题?
最佳答案
-l
仅用于指定库的名称。例如。如果你写 -lfoo
, gcc 寻找 libfoo: 首先是动态版本,即 libfoo.so
, 如果没有找到它,那么对于静态的,即 libfoo.a
.
不是包含路径。
但是 gcc 在哪里会寻找我的 libfoo.so,你会问吗?
它使用一些标准路径,这些路径在您的两台 PC 上可能不同,因此它可以在一台上运行而在另一台上不起作用。要建议更多库搜索路径,请使用参数 -L
.它可以出现多次。
示例:gcc ... -lfoo -lbar -L/my/path/to/libraries1 -L/my/second/library/path
寻找 libfoo.so
和 libbar.so
(可能还有 libfoo.a
和 libbar.a
)在标准搜索目录以及自定义目录中 /my/path/to/libraries1
和 /my/second/library/path
.
关于c++ - ld 两台计算机之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38049929/