更新:找到一种方法进行编译,见下文。
您好,我在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中很重要?
答案 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