Gcc boost::asio::streambuf--链接器错误

Gcc boost::asio::streambuf--链接器错误,gcc,c++11,boost-asio,linker-errors,Gcc,C++11,Boost Asio,Linker Errors,我在编译boost程序时遇到问题。我试图编译的示例如下: 这就是我尝试编译时发生的情况: % g++ -Wall test.c -lboost_regex -lboost_system -lboost_thread /tmp/ccJSxOji.o: In function `boost::exception_detail::error_info_injector<std::length_error>::error_info_injector(boost::except

我在编译boost程序时遇到问题。我试图编译的示例如下:

这就是我尝试编译时发生的情况:

  % g++ -Wall test.c -lboost_regex  -lboost_system -lboost_thread 
    /tmp/ccJSxOji.o: In function `boost::exception_detail::error_info_injector<std::length_error>::error_info_injector(boost::exception_detail::error_info_injector<std::length_error> const&)':
    test.c:(.text._ZN5boost16exception_detail19error_info_injectorISt12length_errorEC2ERKS3_[_ZN5boost16exception_detail19error_info_injectorISt12length_errorEC5ERKS3_]+0x53): undefined reference to `std::length_error::~length_error()'
    /tmp/ccJSxOji.o: In function `boost::exception_detail::error_info_injector<std::length_error>::~error_info_injector()':
    test.c:(.text._ZN5boost16exception_detail19error_info_injectorISt12length_errorED2Ev[_ZN5boost16exception_detail19error_info_injectorISt12length_errorED5Ev]+0x2e): undefined reference to `std::length_error::~length_error()'
    collect2: ld returned 1 exit status
我使用的是gcc 4.6.0,当然是linux:

% gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-linux-gnu/4.6.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: /build/src/gcc-4.6-20110429/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --disable-multilib --disable-libstdcxx-pch --enable-checking=release
Thread model: posix
gcc version 4.6.0 20110429 (prerelease) (GCC) 
可能相关线程:


我不想回答我自己的问题,但事实证明,我被这句话咬了一口:

我做了更多的挖掘:

 % ldd /usr/lib/libboost_regex.so
/usr/lib/libboost_regex.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/libboost_regex.so)
        linux-gate.so.1 =>  (0xb77b3000)
        libicuuc.so.46 => /usr/lib/libicuuc.so.46 (0xb7553000)
        libicui18n.so.46 => /usr/lib/libicui18n.so.46 (0xb7389000)
        libicudata.so.46 => /usr/lib/libicudata.so.46 (0xb650a000)
        librt.so.1 => /lib/librt.so.1 (0xb6501000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6412000)
        libm.so.6 => /lib/libm.so.6 (0xb63e8000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb63cc000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb63b1000)
        libc.so.6 => /lib/libc.so.6 (0xb624b000)
        libdl.so.2 => /lib/libdl.so.2 (0xb6246000)
        /lib/ld-linux.so.2 (0xb77b4000)

% ldd /usr/lib/libboost_date_time.so
/usr/lib/libboost_date_time.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/libboost_date_time.so)
        linux-gate.so.1 =>  (0xb78cf000)
        librt.so.1 => /lib/librt.so.1 (0xb788f000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb77a1000)
        libm.so.6 => /lib/libm.so.6 (0xb7777000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb775b000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb773f000)
        libc.so.6 => /lib/libc.so.6 (0xb75d9000)
        /lib/ld-linux.so.2 (0xb78d0000)
总之,我的gcc LIB已经过时了。为了解决这个问题,我做了:

# pacman -Q -o /usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6 is owned by gcc-libs 4.6.0-5

# pacman -S gcc-libs

感谢所有发表评论的人,你让我朝着正确的方向思考。

我不想回答自己的问题,但事实证明,我被这句话咬了一口:

我做了更多的挖掘:

 % ldd /usr/lib/libboost_regex.so
/usr/lib/libboost_regex.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/libboost_regex.so)
        linux-gate.so.1 =>  (0xb77b3000)
        libicuuc.so.46 => /usr/lib/libicuuc.so.46 (0xb7553000)
        libicui18n.so.46 => /usr/lib/libicui18n.so.46 (0xb7389000)
        libicudata.so.46 => /usr/lib/libicudata.so.46 (0xb650a000)
        librt.so.1 => /lib/librt.so.1 (0xb6501000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6412000)
        libm.so.6 => /lib/libm.so.6 (0xb63e8000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb63cc000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb63b1000)
        libc.so.6 => /lib/libc.so.6 (0xb624b000)
        libdl.so.2 => /lib/libdl.so.2 (0xb6246000)
        /lib/ld-linux.so.2 (0xb77b4000)

% ldd /usr/lib/libboost_date_time.so
/usr/lib/libboost_date_time.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/libboost_date_time.so)
        linux-gate.so.1 =>  (0xb78cf000)
        librt.so.1 => /lib/librt.so.1 (0xb788f000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb77a1000)
        libm.so.6 => /lib/libm.so.6 (0xb7777000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb775b000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb773f000)
        libc.so.6 => /lib/libc.so.6 (0xb75d9000)
        /lib/ld-linux.so.2 (0xb78d0000)
总之,我的gcc LIB已经过时了。为了解决这个问题,我做了:

# pacman -Q -o /usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6 is owned by gcc-libs 4.6.0-5

# pacman -S gcc-libs

感谢所有发表评论的人,您让我朝着正确的方向思考。

为我编译并运行。gcc 4.5.2、gcc 4.6.0、boost 1.42、boost 1.46。在包含任何boost头之前,请尝试向源文件添加include。这个错误使我认为它只是试图用类的正向声明进行捕获。@ildjarn No go。与以前相同的错误消息。顺便说一句,我使用的是Boost1.46。你得到的是链接器错误,而不是编译器错误;不知何故,您没有链接到任何定义了std::length_error的析构函数的对象。。。就我个人而言,我还不能在本地重新编程。@ildjarn很酷,这很有帮助。我将尝试删除我的ArchLinuxBoost和BoostLibs包,然后手动安装boost。为我编译并运行。gcc 4.5.2、gcc 4.6.0、boost 1.42、boost 1.46。在包含任何boost头之前,请尝试向源文件添加include。这个错误使我认为它只是试图用类的正向声明进行捕获。@ildjarn No go。与以前相同的错误消息。顺便说一句,我使用的是Boost1.46。你得到的是链接器错误,而不是编译器错误;不知何故,您没有链接到任何定义了std::length_error的析构函数的对象。。。就我个人而言,我还不能在本地重新编程。@ildjarn很酷,这很有帮助。我将尝试删除我的ArchLinuxBoost和BoostLibs包,然后手动安装boost。