繁体   English   中英

使用cygwin编译boost程序的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM