2017-02-23 42 views
0

閱讀很多帖子後,我感到非常困惑。 我想將動態庫鏈接到我的cpp代碼。將動態庫鏈接到我的項目

圖書館是在/usr/local/include/sbml 和libsbml.so文件可以在/usr/local/lib

發現我有一個makefile,看起來像這樣

SHELL = /bin/sh 
VERSION = 5.04.02 
CC  = /usr/bin/g++ 
CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\" 
LDFLAGS = -lsbml 

OBJ = main.o SBML.o 

prog: $(OBJ) 
    $(CC) $(CFLAGS) -o prog $(OBJ) $(LDFLAGS) 

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

.PHONY : clean 
clean : 
    -rm edit $(OBJ) 

如果我運行makefile我得到以下錯誤:(未定義的引用SBMLReader :: readSBMLFromFile())

g++ -c -o SBML.o SBML.cpp 
/usr/bin/g++ -Wall -g -D_REENTRANT -DVERSION=\"5.04.02\" -o prog main.o SBML.o -lsbml 
sbml.o: In Funktion `SBML::readSBML()': 
sbml.cpp:(.text+0x129): Nicht definierter Verweis auf `SBMLReader::readSBMLFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
collect2: error: ld returned 1 exit status 
+0

問題解決了。我做了一個初學者的錯誤。我安裝了庫包,但是我忘了安裝帶有所有頭文件的-dev包。安裝第二個包後,我的makefile工作。 –

回答

3

該庫沒有鏈接,因爲你需要指定包含所謂的文件以及文件夾:

LDFLAGS = -L/usr/local/lib -lsbml 

現在應該鏈接和你解決的符號應該消失爲好。

+0

好的。我已將此鏈接添加到我的生成文件的較舊版本。它給了我同樣的錯誤'/ usr/bin/g ++ -Wall -g -D_REENTRANT -DVERSION = \「5.04.02 \」-o prog main.o SBML.o -L/usr/local/lib -lsbml SBML .o:In Funktion SBML :: readSBML(): SBML.cpp :(。text + 0x129):Nicht definierter Verweis SBFReader :: readSBMLFromFile(std :: __ cxx11 :: basic_string ,std :: allocator > const&) '我刪除了這個鏈接,因爲我認爲這個文件夾在我的PATH變量中,並且C++編譯器無論如何檢查了這個文件夾 –

+0

好的,那麼你應該確保在你的版本中定義了使用的符號lib使用正確的參數:nm /usr/local/lib/libsbml.so | grep readSBMLFromFile – KimKulling

相關問題