我有一个让我头疼的问题,假设 command-L 在 Makefile 的当前目录中搜索库,但它对我不起作用,例如我的 Makefile 中有以下命令:
...
LDLIBS = -L/libs -lmatrix
main: main.o operations.o display.o
$(CC) $(LDLIBS) $^ -o $@
...
当我尝试编译它时,它的字面意思是:
gcc -L/libs -lmatrix main.o operations.o display.o -o main
/usr/bin/ld: cannot find -lmatrix
collect2: ld returned 1 exit status
make: *** [main] Error 1
但是当我简单地将“-L/libs”更改为“-L$(PWD)/libs”时,它可以完美编译并且我的程序运行良好......
但是使用“-L$(PWD)”我又遇到了另一个问题,如果任何目录的名称有空格它又不起作用了,实际上我不知道这个问题是否不可修复(使用$(PWD)或不),但我仍然怀疑为什么它在没有 $(PWD) 的情况下不起作用,因为显然(在互联网上看到 很多 示例)使用 -L,$(PWD) 是不需要的。
最佳答案
你错了,它不需要。路径 /libs
表示文件系统根目录下的 libs
目录。就像/bin
不代表“我当前目录下的bin
目录”一样,/libs
也不代表我当前目录下的libs
目录。
如果要查看当前目录下的libs
,就用-Llibs
或者如果你想更具体一点,-L./libs
(目录.
就是当前目录,所以cd .
转到当前目录,就像cd ..
转到父目录一样)。
关于c - Makefile 链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22918488/