2009-08-14 93 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