2016-06-01 7 views
1

Ich bin ein Anfänger Entwickler auf OS X. Wenn ich ein Projekt mit einem Makefile kompilieren, gibt es einen Fehler, den ich nicht lösen kann. Aber ich kann dieses Projekt unter Ubuntu16.04 erfolgreich ausführen, aber nicht, wenn ich es auf Mac verschiebe.Bibliothek nicht gefunden für -lncurses auf OS X-Terminal

Dies ist der Terminal Druck:

currychen-MC1:llvm-clang-iMac currychen$ make 
g++ -I/usr/include -fno-rtti -O0 -g `/Users/currychen/llvm/llvm3.8-binaries/bin/llvm-config --cxxflags` -I/Users/currychen/llvm/tools/clang/include -I/Users/currychen/llvm/llvm3.8-binaries/tools/clang/include src_clang/rewritersample.cp -lclangAST -lclangAnalysis -lclangBasic -lclangDriver -lclangEdit -lclangFrontend -lclangFrontendTool -lclangLex -lclangParse -lclangSema -lclangEdit -lclangASTMatchers -lclangRewrite -lclangRewriteFrontend -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangSerialization -lclangToolingCore -lclangTooling `/Users/currychen/llvm/llvm3.8-binaries/bin/llvm-config --ldflags --libs --system-libs` -o build/rewritersample 
clang: warning: no such sysroot directory: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk' 
ld: library not found for -lcurses 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [build/rewritersample] Error 1" 

und mein Makefile ist

LLVM_SRC_PATH := /Users/currychen/llvm 
LLVM_BUILD_PATH := /Users/currychen/llvm/llvm3.8-binaries 
LLVM_BIN_PATH := $(LLVM_BUILD_PATH)/bin 

CXX := g++ -I/usr/include 
CXXFLAGS := -fno-rtti -O0 -g 

LLVM_CXXFLAGS := `$(LLVM_BIN_PATH)/llvm-config --cxxflags` 
LLVM_LDFLAGS := `$(LLVM_BIN_PATH)/llvm-config --ldflags --libs --system-libs` 
LLVM_LDFLAGS_NOLIBS := `$(LLVM_BIN_PATH)/llvm-config --ldflags` 


CLANG_INCLUDES := \ 
    -I$(LLVM_SRC_PATH)/tools/clang/include \ 
     -I$(LLVM_BUILD_PATH)/tools/clang/include 

CLANG_LIBS := \ 
    -lclangAST \ 
     -lclangAnalysis \ 
     -lclangBasic \ 
     -lclangDriver \ 
     -lclangEdit \ 
     -lclangFrontend \ 
     -lclangFrontendTool \ 
     -lclangLex \ 
     -lclangParse \ 
     -lclangSema \ 
     -lclangEdit \ 
     -lclangASTMatchers \ 
     -lclangRewrite \ 
     -lclangRewriteFrontend \ 
     -lclangStaticAnalyzerFrontend \ 
     -lclangStaticAnalyzerCheckers \ 
     -lclangStaticAnalyzerCore \ 
     -lclangSerialization \ 
     -lclangToolingCore \ 
     -lclangTooling 

SRC_CLANG_DIR := src_clang 
BUILDDIR := build 

$(BUILDDIR)/rewritersample: $(SRC_CLANG_DIR)/rewritersample.cp 
    $(CXX) $(CXXFLAGS) $(LLVM_CXXFLAGS) $(CLANG_INCLUDES) $^ $(CLANG_LIBS) $(LLVM_LDFLAGS) -o [email protected] 


.PHONY: clean 
clean: 
    -rm -rf $(BUILDDIR)/* 
+0

Auf meinem Mac kann ich 'ls/usr/lib/lib * curse *' ausführen und die Liste abrufen: '/ usr/lib/libcurses.dylib','/usr/lib/libncurses.5.4.dylib' , '/ usr/lib/libncurses.5.dylib','/usr/lib/libncurses.dylib'. Was bekommst du? –

+0

Fügen Sie Ihrer Kompilierzeile ein '-v' hinzu und sehen Sie, welche Flags wirklich verwendet werden, und finden Sie heraus, warum'/usr/lib' nicht auf der Liste steht. OS X enthält standardmäßig Flüche. –

+0

Wenn ich ls/usr/lib/lib * curse * ausführen, kann ich die Liste/usr/lib/libcurses.dylib \t /usr/lib/libncurses.5.dylib /usr/lib/libncurses.5.4.dylib abrufen \t /usr/lib/libncurses.dylib – CurryChen

Antwort

0

Dank @ Jonathan Leffler und @Carl Norum. Fügen Sie ein -v ist sehr hilfreich für mich zu sehen, welche Flags wirklich verwendet werden. Und schließlich füge ich auch ein -L in g ++ hinzu, um den Compiler zu informieren, wo die Lib in. Also, wenn Sie die libXXX installiert haben, sollten Sie das Verzeichnis ernennen, um den Compiler wissen zu lassen.