链接dylib库

问题描述:

我想一个dylib链接到我的Mac上的makefile,但锵给出了这样的消息:链接dylib库

Undefined symbols for architecture x86_64: 
"_zbesj_wrap", referenced from: 
    sp_bessel::besselJ(double, std::__1::complex<double>) in besselJ.o 
"_zbesy_wrap", referenced from: 
    sp_bessel::besselJ(double, std::__1::complex<double>) in besselJ.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我在/ usr/lib中,在那里我可以看到libcomplex_bessel.0.6安装库.0.dylib和libcomplex_bessel.dylib。 这是我的makefile:

OBJS = main.o besselJ.o 
CC = c++ 
CFLAGS = -std=c++11 -stdlib=libc++ 
LIBS = -L/usr/lib -lcomplex_bessel 
PROGRAM_NAME = test 

all: $(PROGRAM_NAME) 
$(PROGRAM_NAME): $(OBJS) 
    $(CC) $(CFLAGS) $(OBJS) -o [email protected] 
main.o: main.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] 
besselJ.o: besselJ.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] $(LIBS) 

阅读其他问题后,我尝试了-L和-l不同的组合,但毫无效果。很抱歉,但它是我第一次与外部库...


我改变了我的makefile这样:

OBJS = main.o besselJ.o 
CC = c++ 
CFLAGS = -std=c++11 -stdlib=libc++ 
LIBS = -L/usr/lib -lcomplex_bessel 
PROGRAM_NAME = test 

all: $(PROGRAM_NAME) 
$(PROGRAM_NAME): $(OBJS) 
    $(CC) $(CFLAGS) $(OBJS) -o [email protected] $(LIBS) 
main.o: main.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] 
besselJ.o: besselJ.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

,但我仍然有问题,我得到这个消息:

c++ -std=c++11 -stdlib=libc++ main.o besselJ.o -o test -L/usr/lib -lcomplex_bessel 
ld: library not found for -lcomplex_bessel 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [test] Error 1 

好吧,我想我解决了它使用xcode-select --install:其他用户更新后有与库相同的问题。

您需要的库传递到连接器,而不是编译:

OBJS = main.o besselJ.o 
CC = c++ 
CFLAGS = -std=c++11 -stdlib=libc++ 
LIBS = -L/usr/lib -lcomplex_bessel 
PROGRAM_NAME = test 

all: $(PROGRAM_NAME) 
$(PROGRAM_NAME): $(OBJS) 
    $(CC) $(OBJS) -o [email protected] $(LIBS) 
main.o: main.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] 
besselJ.o: besselJ.cpp 
    $(CC) $(CFLAGS) -c $< -o [email protected] 
+0

好,谢谢,我做到了,但我得到这个消息: LD:库找不到-lcomplex_bessel 铛:错误:连接命令失败,退出代码1(使用-v查看调用) – gabri

+0

我解决了它,谢谢:) – gabri