使用cygwin编译升级程序的问题

时间:2009-08-14 21:58:13

标签: c++ boost cygwin boost-regex

更新:找到一种方法进行编译,见下文。

您好,我在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,但它似乎与包含文件不匹配。这是第一个链接器错误:

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 个答案:

答案 0 :(得分:2)

事实证明,连接器传统上从右到左处理库。大多数链接器不关心库放置,但cygwin确实如此。所以boost_regex库必须在最后。

答案 1 :(得分:0)

如果你看一下boost文档(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