2017-05-14 115 views
1

我想一個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:其他用戶更新後有與庫相同的問題。

回答

1

您需要的庫傳遞到連接器,而不是編譯:

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