我有一个让我头疼的问题,假设 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/

10-13 08:21