2009-08-14 91 views
0

UPDATE:找到一種方法讓它編譯,見下文。使用cygwin編譯boost程序的問題

你好,我有問題在cygwin下編譯boost程序。我已經從cygwin項目的setup.exe安裝了默認的boost和g ++包。

在我的Linux系統,我可以通過編譯程序reg.cpp如下:

g++ -I/usr/include/boost -lboost_regex -o reg reg.cpp 

在Cygwin我必須編輯這個只是有點:

g++ -I/usr/include/boost-1_33_1 -lboost_regex-gcc-mt -o reg reg.cpp 

的問題是, cygwin版本會導致鏈接器拉出一百萬個未定義的引用錯誤。嘗試使用boost測試框架庫也會發生同樣的事情。

鏈接器找到boost_regex-gcc-mt,但它看起來不匹配include文件。這是第一個鏈接錯誤:

undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 

如何編譯

我找到了解決辦法here要編譯,我做了以下內容:

g++ -I/usr/include/boost-1_33_1 reg.cpp -o reg -lboost_regex-gcc-mt 

據後,它有什麼與鏈接器順序有關。任何人都知道爲什麼這在cygwin中很重要,但不是現代Linux?

回答

2

事實證明,鏈接器傳統上從右向左處理庫。大多數連接器不關心庫放置,但cygwin的確。所以boost_regex庫必須結束。

0

如果你看一下提升文檔(Getting Started)的例子:

在Cygwin的命令應該是:

g++ -c example.cpp 
g++ -o example.exe example.o -lboost_regex-mt 

(該庫包含cpp文件後) WRONG:

g++ -o example.exe -lboost_regex-mt example.o