繁体   English   中英

nuwen MinGW + Boost-错误链接boost_regex

[英]nuwen MinGW + Boost- error linking boost_regex

我下载了MinGW的nuwen发行版,它附带了Boost(GCC 4.6.1和Boost 1.47.0。)。 我想在c ++程序中使用Boost regex包。 libboost_regex.a包含在C:\\ dev \\ MinGW \\ lib中,它位于我的路径以及MinGW的库搜索路径中。 当我编译时,它给了我很多很多错误。 我尝试在g ++命令行中给它提供了库的确切路径,但无济于事。 我最好的编译尝试: g++ -o test -LC:\\dev\\MinGW -lboost_regex testBoost.cpp 我正在尝试运行的程序:

#include <iostream>
#include <boost/regex.hpp>

int main (int argc, char* argv[])
{
            static const boost::regex exp ("hello regex!");
}

我大量的错误:

C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail27cpp_regex_traits_char_layerIcEC2ERKNS0_21cpp_regex_traits_baseIcEE[boost::re_detail::cpp_regex_traits_char_layer<char>::cpp_regex_traits_char_layer(boost::re_detail::cpp_regex_traits_base<char> const&)]+0x20): undefined reference to `boost::re_detail::cpp_regex_traits_char_layer<char>::init()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail11raw_storage6extendEj[boost::re_detail::raw_storage::extend(unsigned int)]+0x41): undefined reference to `boost::re_detail::raw_storage::resize(unsigned int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail18basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4failENS_15regex_constants10error_typeEiSsi[boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)]+0x214): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail18basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4failENS_15regex_constants10error_typeEiSsi[boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)]+0x21f): undefined reference to `boost::regex_error::raise() const'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail18basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4failENS_15regex_constants10error_typeEiSsi[boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)]+0x22a): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail18basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4failENS_15regex_constants10error_typeEiSsi[boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)]+0x285): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x109): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x114): undefined reference to `boost::regex_error::raise() const'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x11f): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x2e0): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x2eb): undefined reference to `boost::regex_error::raise() const'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x2f6): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x345): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fixup_recursions(boost::re_detail::re_syntax_base*)]+0x382): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmaps(boost::re_detail::re_syntax_base*)]+0x179): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmaps(boost::re_detail::re_syntax_base*)]+0x184): undefined reference to `boost::regex_error::raise() const'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmaps(boost::re_detail::re_syntax_base*)]+0x18f): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmaps(boost::re_detail::re_syntax_base*)]+0x2d6): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmap(boost::re_detail::re_syntax_base*, unsigned char*, unsigned int*, unsigned char)]+0x23d): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmap(boost::re_detail::re_syntax_base*, unsigned char*, unsigned int*, unsigned char)]+0x248): undefined reference to `boost::regex_error::raise() const'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmap(boost::re_detail::re_syntax_base*, unsigned char*, unsigned int*, unsigned char)]+0x253): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmap(boost::re_detail::re_syntax_base*, unsigned char*, unsigned int*, unsigned char)]+0x947): undefined reference to `boost::regex_error::~regex_error()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZNK5boost9re_detail31cpp_regex_traits_implementationIcE12error_stringENS_15regex_constants10error_typeE[boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const]+0x89): undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZNK5boost9re_detail31cpp_regex_traits_implementationIcE12error_stringENS_15regex_constants10error_typeE[boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const]+0xe7): undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12insert_stateEiNS0_19syntax_element_typeEj[boost::re_detail::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::insert_state(int, boost::re_detail::syntax_element_type, unsigned int)]+0x94): undefined reference to `boost::re_detail::raw_storage::insert(unsigned int, unsigned int)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost12object_cacheINS_9re_detail21cpp_regex_traits_baseIcEENS1_31cpp_regex_traits_implementationIcEEE3getERKS3_j[boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::get(boost::re_detail::cpp_regex_traits_base<char> const&, unsigned int)]+0x1e): undefined reference to `boost::scoped_static_mutex_lock::scoped_static_mutex_lock(boost::static_mutex&, bool)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost12object_cacheINS_9re_detail21cpp_regex_traits_baseIcEENS1_31cpp_regex_traits_implementationIcEEE3getERKS3_j[boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::get(boost::re_detail::cpp_regex_traits_base<char> const&, unsigned int)]+0x59): undefined reference to `boost::scoped_static_mutex_lock::~scoped_static_mutex_lock()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost12object_cacheINS_9re_detail21cpp_regex_traits_baseIcEENS1_31cpp_regex_traits_implementationIcEEE3getERKS3_j[boost::object_cache<boost::re_detail::cpp_regex_traits_base<char>, boost::re_detail::cpp_regex_traits_implementation<char> >::get(boost::re_detail::cpp_regex_traits_base<char> const&, unsigned int)]+0xdf): undefined reference to `boost::scoped_static_mutex_lock::~scoped_static_mutex_lock()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZNK5boost9re_detail31cpp_regex_traits_implementationIcE18lookup_collatenameEPKcS4_[boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const]+0x10f): undefined reference to `boost::re_detail::lookup_default_collate_name(std::string const&)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail31cpp_regex_traits_implementationIcE4initEv[boost::re_detail::cpp_regex_traits_implementation<char>::init()]+0xe3): undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost9re_detail31cpp_regex_traits_implementationIcE4initEv[boost::re_detail::cpp_regex_traits_implementation<char>::init()]+0x11a): undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost16cpp_regex_traitsIcE16get_catalog_nameEv[boost::cpp_regex_traits<char>::get_catalog_name()]+0x1f): undefined reference to `boost::scoped_static_mutex_lock::scoped_static_mutex_lock(boost::static_mutex&, bool)'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost16cpp_regex_traitsIcE16get_catalog_nameEv[boost::cpp_regex_traits<char>::get_catalog_name()]+0x3e): undefined reference to `boost::scoped_static_mutex_lock::~scoped_static_mutex_lock()'
C:\Users\nate\AppData\Local\Temp\ccTuJyrB.o:testBoost.cpp:(.text$_ZN5boost16cpp_regex_traitsIcE16get_catalog_nameEv[boost::cpp_regex_traits<char>::get_catalog_name()]+0x56): undefined reference to `boost::scoped_static_mutex_lock::~scoped_static_mutex_lock()'
collect2: ld returned 1 exit status

编辑:正如迈克尔伯尔所建议的,我跑了g ++ -Wl --verbose。 这是它的输出:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/dev/mingw/bin/../libexec/gcc/i686-pc-mingw32/4.6.1/lto-wrapper.exe
Target: i686-pc-mingw32
Configured with: ../src/configure --prefix=/c/temp/gcc/dest --enable-languages=c,c++ --with-arch=i686 --with-tune=generic --disable-libstdcxx-pch --disable-nls --disable-shared --disable-sjlj-exceptions --disable-win32-registry --enable-checking=release --disable-lto
Thread model: win32
gcc version 4.6.1 (GCC) 
COLLECT_GCC_OPTIONS='-o' 'test.exe' '-Wl' '-v' '-LC:\dev\MinGW\' '-mtune=generic' '-march=i686'
 c:/dev/mingw/bin/../libexec/gcc/i686-pc-mingw32/4.6.1/cc1plus.exe -quiet -v -iprefix c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/ testBoost.cpp -quiet -dumpbase testBoost.cpp -mtune=generic -march=i686 -auxbase testBoost -Wl -version -o C:\Users\nate\AppData\Local\Temp\ccX1SmTk.s
cc1plus.exe: error: unrecognized command line option '-Wl'
GNU C++ (GCC) version 4.6.1 (i686-pc-mingw32)
    compiled by GNU C version 4.6.1, GMP version 5.0.2, MPFR version 3.0.1-p4, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/../../../../i686-pc-mingw32/include"
ignoring duplicate directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1"
ignoring duplicate directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1/i686-pc-mingw32"
ignoring duplicate directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1/backward"
ignoring duplicate directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/include"
ignoring nonexistent directory "c:/temp/gcc/dest/include"
ignoring nonexistent directory "/c/temp/gcc/dest/include"
ignoring duplicate directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/include-fixed"
ignoring nonexistent directory "c:/dev/mingw/lib/gcc/../../lib/gcc/i686-pc-mingw32/4.6.1/../../../../i686-pc-mingw32/include"
ignoring nonexistent directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1/i686-pc-mingw32
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include/c++/4.6.1/backward
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/include
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/../../../../include
 c:\dev\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/include-fixed
End of search list.
GNU C++ (GCC) version 4.6.1 (i686-pc-mingw32)
    compiled by GNU C version 4.6.1, GMP version 5.0.2, MPFR version 3.0.1-p4, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072

这对我来说很好用-lboost_regex在命令行上传递(来自nuwen.net的mingw-7.2.exe发行版 - 刚刚解压缩,没有对分发做任何其他事情 - 其中包含你提到的编译器和boost版本)。

尝试传递选项-Wl,--verbose让gnu ld链接器详细说明它在哪里寻找库 - 这可能会给你一个线索。 也许一些隐藏的选项/环境设置导致错误的libboost_regex.a被拾取?

另一件事是将库的完整路径和文件名作为输入文件传递给g++ (没有选项) - GCC会发现它是一个库文件(并且不会对它进行lib目录搜索)。 因此,假设您在C:\\dev\\Mingw安装了MinGW,命令行应如下所示:

g++ -o test -LC:\dev\MinGW testBoost.cpp c:\dev\MinGW\lib\libboost_regex.a

如果这样可行,那么您在找到错误的库时遇到问题,并且您需要修复构建脚本/构建配置,否则您将继续遇到问题。 如果仍然无效,那么库可能已损坏 - 请尝试再次下载和/或解压缩nuwen.net发行版。 或者尝试从头开始构建Boost库(这可能需要一段时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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