2012-01-24 5 views
1

私は問題oneiricのUbuntuの上で最も簡単なプログラムを/ clinking持っている:メイク以下のエラーにMakefileの(C++)glibmm/

PACKAGES=glibmm-2.4 glib-2.0 gtkmm-3.0 gtk+-3.0 
CC=g++ 
CFLAGS=`pkg-config --cflags $(PACKAGES)` --std=c++0x 
LD=g++ 
LDFLAGS=`pkg-config --libs $(PACKAGES)` 

build: ./main 

run: build 
    ./main 

clean: 
    rm ./main.o 

rebuild: clean build 

./main: ./main.o 
    $(LD) $(LDFLAGS) ./main.o -o ./main 

./main.o: ./main.cc 
    $(CC) $(CFLAGS) ./main.cc -c -o ./main.o 

を使用して

#include <glibmm/ustring.h> 

int main() 
{ 
    Glib::ustring s = "Test string"; 
} 

表示されます:

./main.o: In function `main': 
main.cc:(.text+0x15): undefined reference to `Glib::ustring::ustring(char const*)' 
main.cc:(.text+0x21): undefined reference to `Glib::ustring::~ustring()' 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

Ubuntu/Maverickでは、まったく同じコードがまったく同じファイルにリンクしています... 使用している場合それは正常にリンクしていますが(予想通り)_startが見つかりません...

何か提案がありますか?

答えて

2

は、これに関連する行を変更してみてください:

LDFLAGS=`pkg-config --libs-only-L --libs-only-other $(PACKAGES)` 
LIBS=`pkg-config --libs-only-l $(PACKAGES)` 

# ... 

./main: ./main.o 
    $(LD) $(LDFLAGS) ./main.o -o ./main $(LIBS) 

理由は、リンカは、彼らがコマンドラインで指定されているので、彼らは常に安全であることが最後に置かれるべき順番でライブラリを検索することです。