[英]Issues compiling boost programs using cygwin
更新 :找到一种使其编译的方法,请参见下文。
您好,我在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_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中却不重要吗?
事实证明,链接器传统上是从右到左处理库。 大多数链接器并不关心库的放置,但是cygwin却关心。 因此boost_regex库必须放在最后。
如果您查看boost文档的示例( 入门 ):
Cygwin上的命令应为:
g++ -c example.cpp
g++ -o example.exe example.o -lboost_regex-mt
(该库包含在cpp文件之后。)错误:
g++ -o example.exe -lboost_regex-mt example.o
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.