3

Eclipse cdt ウィンドウのブーストから次のライブラリが含まれています。

  1. libboost_filesystem-vc100-mt-1_51
  2. libboost_system-vc100-mt-1_51

カウンセル出力 (以下) の上部から、それらは正常に接続されているように見えます。それでも、次のエラーが発生します。

カウンセル出力/エラー:

18:10:00 **** Incremental Build of configuration Debug for project Boost ****
Info: Internal Builder is used for build
g++ "-LC:\\Users\\Mike\\Desktop\\Lib\\boost_1_51_0\\stage\\lib" -o Boost.exe "src\\Boost.o" -llibboost_filesystem-vc100-mt-1_51 -llibboost_system-vc100-mt-1_51 
src\Boost.o: In function `_static_initialization_and_destruction_0':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
src\Boost.o: In function `ZN5boost10filesystem9file_sizeERKNS0_4pathE':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/operations.hpp:447: undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
src\Boost.o: In function `path<char [9]>':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/path.hpp:139: undefined reference to `boost::filesystem::path::codecvt()'
src\Boost.o: In function `ZN5boost10filesystem11path_traits8dispatchISbIwSt11char_traitsIwESaIwEEEEvRKSsRT_RKSt7codecvtIwciE':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/path_traits.hpp:174: undefined reference to `boost::filesystem::path_traits::convert(char const*, char const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&, std::codecvt<wchar_t, char, int> const&)'
collect2: ld returned 1 exit status

システムライブラリが正しく接続/リンクしていないようです。

私のコード:

#include <boost/filesystem.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    using namespace boost::filesystem;
    file_size("test.txt");
    return 0;

}

何か不足していますか?他に何かを含める必要がありますか?

4

1 に答える 1

3

各 C++ コンパイラには、独自のルールと関数名マングリング (C++ 関数名を ASM または C のような関数に変換する) の実装があります。
たとえば、MSVC は boost::system::generic_category を ?generic_category@system@boost@@YAABVerror_category@12@XZ に変換しますが、この場合は、MSVC2010(vc100) を使用してビルドされた DLL を使用しています。名前をマングリングするためのルールであるため、ライブラリで見つけることができない他の何かを期待し、リンカ エラーを生成します。

原則として、プロジェクトで使用しているコンパイラとは異なるコンパイラからコンパイルされた DLL から C++ オブジェクトを使用することは合法ではありません。これが、boost が DLL 名に vc100 を追加して、vc100 ( MSVC2010 ) でのみ使用する必要があることを通知する理由です。

于 2012-08-26T21:58:41.883 に答える