0

を使用して現在のディレクトリ内のアイテムをリストしようとしていますboost::filesystemが、次のようになります:

Unhandled exception at 0x6B59DF8D (msvcr110.dll) in BoostTest.exe: 0xC0000005: Access violation reading location 0x9BE3B7A1.

これが私のコードです:

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

using namespace boost::filesystem;

int main() {
    std::cout << "Hello World!\n";
    auto end_it = directory_iterator();
    for(auto it = directory_iterator(current_path()); it != end_it; it++) {
        std::cout << it->path() << std::endl;
    }
    std::cin.get();
    return 0;
}

mingw から vs2012 に切り替えたばかりですが、リンク エラーなどの可能性があると思います。これらの 32 ビット ライブラリとリンクしています。

  • boost_filesystem-vc110-mt-1_52.lib

これらのファイルは、実行可能ファイルのディレクトリにあります。

  • boost_filesystem-vc110-mt-1_52.dll
  • boost_system-vc110-mt-1_52.dll

この Web サイトからダウンロード: http://boost.teeks99.com/

プラットフォームは「Win32」に設定されています。

Visual Studio 2012 ウィンドウのログは次のとおりです。

'BoostTest.exe' (Win32): Loaded 'C:\Users\Ell\Programming\C++\BoostTest\Debug\BoostTest.exe'. Symbols loaded.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Users\Ell\Programming\C++\BoostTest\Debug\boost_filesystem-vc110-mt-1_52.dll'. Module was built without symbols.
'BoostTest.exe' (Win32): Loaded 'C:\Users\Ell\Programming\C++\BoostTest\Debug\boost_system-vc110-mt-1_52.dll'. Module was built without symbols.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110.dll'. Symbols loaded.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110.dll'. Symbols loaded.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110d.dll'. Symbols loaded.
'BoostTest.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110d.dll'. Symbols loaded.
First-chance exception at 0x6B59DF8D (msvcr110.dll) in BoostTest.exe: 0xC0000005: Access violation reading location 0x9BF7B7A1.
Unhandled exception at 0x6B59DF8D (msvcr110.dll) in BoostTest.exe: 0xC0000005: Access violation reading location 0x9BF7B7A1.
The program '[5292] BoostTest.exe' has exited with code 0 (0x0).

私のプラットフォームは、Visual Studio 2012 64 ビット コンパイラを搭載した Windows 7 64 ビットです。

私はこれまで Linux と mingw でしか開発したことがないので、何かを間違ってリンクしたり、そのようなものをリンクしたりしている可能性があります。おそらくアーキテクチャの問題です (ただし、32 ビット アプリケーションは 32 ビット ライブラリを使用しているという印象を受けました)。どんな助けでも大歓迎です!

4

1 に答える 1

0

これはあなたが投稿した問題を解決するための答えではありませんが、私があなたの投稿した例を作成し、それが32ビットライブラリで動作したことを確認することで少なくとも役立ちます(私は願っています):

Hello World! 

"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\Debug" 
"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\ReadMe.txt"
"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\stdafx.cpp" 
"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\stdafx.h" 
"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\targetver.h"
 "C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\TestOperator.cpp" 
"C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\TestOperator.vcxproj"
 "C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\TestOperator\TestOperator.vcxproj.filters"

上で引用したサイトからライブラリ(32/64)をダウンロードしましたが、これに従って64ビットバージョンでリンクエラーが発生しました。(64ビットOS、コンパイラなどがあります。)32ビットバージョンとリンクすると、上記のようにすべて正常に動作しました。

PDBファイルに関して表示される警告は、これらのlibs / dllでデバッグ情報が利用できないことを示すメッセージにすぎません。したがって、基本的には、原則として、何も悪いことはしていないと思います。

Boostが例外をスローしている場合は、これを使用してさらに情報を取得できます。

#include <boost/exception/diagnostic_information.hpp>

...

catch(...)
{
    std::cerr << "Unhandled exception!" << std::endl <<
    boost::current_exception_diagnostic_information();
    return 0;
}

最後に役立つかもしれないことは、追加することです

#define BOOST_LIB_DIAGNOSTIC

メインのcppファイルの先頭に移動し、出力ウィンドウを見て、リンクされているライブラリを正確に確認します。例:

1>  stdafx.cpp
1>  TestOperator.cpp
1>  Linking to lib file: libboost_system-vc110-mt-gd-1_52.lib
1>  Linking to lib file: libboost_filesystem-vc110-mt-gd-1_52.lib
1>  TestOperator.vcxproj -> C:\Users\john\Documents\Visual Studio 2012\Projects\TestOperator\Debug\TestOperator.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
于 2012-11-24T18:09:19.007 に答える