【发布时间】:2015-10-22 08:34:21
【问题描述】:
我有一个目标文件main.o,需要将它与./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
如果直接链接它们就可以了,如
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
【问题讨论】:
-
“找不到共享库”你遇到了哪些错误?
-
您是否尝试创建指向 libsvm.so 的符号链接?
-
cc -L/usr/local/lib -lsvm main.o -o main这不是来自您的 makefile 的配方。libsvm.o在/usr/local/lib中吗? -
在我们开始帮助您之前,您需要弄清楚为什么 make 没有使用您的规则(或向我们展示您正在使用的实际 makefile)。您还需要知道您尝试链接到的库的实际位置。
-
-lname寻找libname.so而不是libname.so.2或libname.so.0.2或其他任何东西。所以你需要有可用的符号链接或通过路径链接到文件。