0

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

您好,我在 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)'

如何编译

我在这里找到了解决方案要编译,我执行了以下操作:

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

根据帖子,它与链接器顺序有关。有人知道为什么这在 cygwin 而不是现代 Linux 中很重要吗?

4

2 回答 2

2

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

于 2009-08-15T15:28:52.700 回答
0

If you look at the example of the boost documentation (Getting Started):

The command on Cygwin should be :

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

(The library is included AFTER the cpp file.) WRONG:

g++ -o example.exe -lboost_regex-mt example.o 
于 2014-02-21T16:31:25.540 回答