ld 找不到给定的库 -L

ld can't find library given -L

我有一个目标文件 main.o,需要 link 它针对 ./libsvm/libsvm.so.2 的共享库。我有以下 Makefile,但它对我不起作用。库路径已在 -L./libsvm 中指定,但 gcc -lsvm 仍然找不到共享库 (libsvm.so.2)。

这是我的 Makefile:

CC      = g++ -g
CFLAGS  = -Wall
HEADERS = -I./libsvm
OBJ     = main.o
LIBS    = -L./libsvm

all: lib $(OBJ)
     $(CC) $(LIBS) -lsvm $(OBJ) -o main

%.o: %.c
     $(CC) $(CFLAGS) $(HEADERS) -c -o $@ $<

lib:
     cd libsvm; make

如果直接link它们就可以工作,如

ld main.o libsvm/libsvm.so.2 -o main

我想知道 Makefile 中有什么问题。错误信息如下

g++ -g -L./libsvm -lsvm main.o -o main 
ld: library not found for -lsvm 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [all] Error 1

-lsvm 表示使用文件 svm.so

但是您的库文件名为 svm.so.2。 (Version 2)

所以要么重命名,要么用

创建一个符号link
ln -s svm.so.2 svm.so

现在 makefile 应该可以工作了。