2017-02-23 8 views
0

多くの投稿を読んだ後、私は本当に混乱しています。 ダイナミックライブラリを自分のcppコードにリンクしたいとします。私のプロジェクトにダイナミックライブラリをリンクする

ライブラリが/usr/local/include/sbml にあり、libsbml.soファイルには、私は次のエラーを取得するメイクファイルを実行すると、この

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) 

のように見えるメイクファイルを持っている/usr/local/lib

で見つけることができます:あなたのため(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パッケージにインストールするのを忘れました。 2番目のパッケージをインストールすると、私のmakefileが動作します。 –

答えて

3

ライブラリがリンクされていませんでしたsoファイルを含むフォルダを指定する必要があります。

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:FunktionでSBML :: readSBML(): SBML.cpp :(。テキスト+ 0x129):SBMLReader :: readSBMLFromFile(std :: __ cxx11 :: basic_string 、std :: allocator > const&) 'このフォルダは私のPATH変数にあると思っていたのでこのリンクを削除しました.C++コンパイラはこのフォルダをチェックします。 –

+0

[OK]をクリックすると、使用しているシンボルがあなたのバージョンlibに適切なパラメータを付けてください:nm /usr/local/lib/libsbml.so | grep readSBMLFromFile – KimKulling

関連する問題