2011-12-05 70 views
2

我一直在努力編譯和鏈接使用Ubuntu Server 11.01 64位版本下的Boost庫的C++應用程序。 起初沒有用預先包裝的Boost庫取代,我決定自己編譯它。 Boost編譯沒有問題,但是當我嘗試編譯應用程序時,鏈接器開始噴出錯誤,就像沒有包含庫一樣。與GCC的鏈接問題4.6.1

builtinFunctions.o: In function `__static_initialization_and_destruction_0(int, int)': 
builtinFunctions.cpp:(.text+0xcaab): undefined reference to `boost::system::generic_category()' 
builtinFunctions.cpp:(.text+0xcab7): undefined reference to `boost::system::generic_category()' 
builtinFunctions.cpp:(.text+0xcac3): undefined reference to `boost::system::system_category()' 
builtinFunctions.o: In function `boost::system::error_code::error_code()': 
builtinFunctions.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()' 
builtinFunctions.o: In function `boost::filesystem3::exists(boost::filesystem3::path const&)': 
... 

這是我用一個Makefile:

CC=g++ 
CFLAGS=-std=c++0x -c -Wall -I . -I ./boost_1_48_0/ -DBOOST_THREAD_USE_LIB 

all: project 

project: builtinFunctions.o main.o operators.o conversionUtils.o 
     $(CC) -L./boost_1_48_0/stage/lib/ \ 
       -lpthread -lboost_date_time-gcc46-mt-s-1_48 -lboost_program_options-gcc46-mt-s-1_48 \ 
       -lboost_filesystem-gcc46-mt-s-1_48 -lboost_system-gcc46-mt-s-1_48 builtinFunctions.o \ 
       main.o operators.o conversionUtils.o -o project 

main.o: main.cpp 
     $(CC) $(CFLAGS) main.cpp 

operators.o: operators.cpp 
     $(CC) $(CFLAGS) operators.cpp 

conversionUtils.o: conversionUtils.cpp 
     $(CC) $(CFLAGS) conversionUtils.cpp 

builtinFunctions.o: builtinFunctions.cpp 
     $(CC) $(CFLAGS) builtinFunctions.cpp 

clean: 
     rm -rf *o project 

別的我可以嘗試,除了GCC的早期版本?謝謝。

+0

GCC版本是'gcc版本4.6.1(Ubuntu/Linaro 4.6.1-9ubuntu3)' – Tibor

+5

圖書館總是在* end *之後,在所有對象之後... –

+0

謝謝!它現在有效! – Tibor

回答

4

鏈接行matters上的庫的順序和你的錯誤。