0

tinyxmlSTL2.5.5(tinyxmlSTL.lib)およびzlib1.2.7に静的にリンクするVisual Studio 2010C++プロジェクトがあります。(zlibstat.lib)。デバッグとリリースだけでなく、x86とx64の両方をカバーする合計4つのビルドがあります。

次のようなエラーが多数発生するリリースx64を除いて、すべての組み合わせで動作するビルドが生成されます。

MSVCRT.lib(MSVCR100.dll) : error LNK2005: free already defined in LIBCMT.lib(free.obj)

...そして単一の警告:

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

アプリケーションのリンカーオプションに追加/NODEFAULTLIB:MSVCRTすると、次のようになります。

zlibstat.lib(ioapi.obj) : error LNK2001: unresolved external symbol __imp__ftelli64
zlibstat.lib(ioapi.obj) : error LNK2001: unresolved external symbol __imp__fseeki64

基本的に、すべてのプロジェクト(アプリと2つのライブラリ)はMulti-threaded (/MT)リリースビルドでオプションを使用するように設定されていますが、x86は問題なくビルドされますが、x64は上記の問題に悩まされています。

どんな助けやアイデアも大歓迎です。

4

3 に答える 3

2

x64の設定を再確認する必要があります。プロジェクトの1つは、/MDではなくフラグを使用してい/MTます。

MSVCのドキュメントに従って、MSVCRT.libはを使用して呼び出されます/MD


編集 :

あなたのコメントによると、zlibが原因である可能性が高いようです。

zlibには静的バージョンとdllバージョンの両方がありますが、どちらも/MDデフォルトでフラグを使用するため、zlibのビルド中にフラグを変更しない限り、これが問題になります。

を使用してzlibをビルドするには/MT

  1. まだインストールしていない場合は、CMakeをインストールしてください

  2. zlibをダウンロードして抽出しC:\develます。ダウンロードリンクはホームページの約半分にあります。現在、これはzlibバージョン1.2.7を提供します。

  3. このCMakeのバグを回避するには、次を追加します

    if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MSVC)
      set_target_properties(zlibstatic PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
    endif()
    

    C:\ devel \ zlib-1.2.7\CMakeLists.txtの最後まで

  4. VS10コマンドプロンプトで、cd C:\devel\zlib-1.2.7

  5. cmake -H. -Bbuild -G"Visual Studio 10 Win64"

これにより、開くことができるVS sloution C:\ devel \ zlib-1.2.7 \ build\zlib.slnが取得されます。「zlibstatic」ターゲットの設定を、/MTリリース/MTdとデバッグにそれぞれ変更します。

それぞれをビルドすると、buildのサブディレクトリにzlibstatic.libが生成されます。「リリース」または「デバッグ」のいずれか。

于 2012-08-25T13:23:36.267 に答える
1

すべてのプロジェクトのプロジェクトプロパティで、すべてのプロジェクトが同じランタイムタイプ(DLLまたは静的)を使用していることを確認します

これは、[プロジェクトのプロパティ]-> [C /C++]->[コード生成]->[ランタイムライブラリ]にあります。リリースx64ビルドが選択されていることを確認してください。

特定の値は(コンパイルエラーの観点から)それほど重要ではありませんが、すべて同じである必要があります

于 2012-08-25T13:24:22.520 に答える
1

すべてのライブラリが/MTにリンクしているとおっしゃっていますが、そのエラーは、そのうちの1つがリンクしていないことを示しています。正しいライブラリがx64リリースビルドにリンクされていることを再確認してください。

于 2012-08-25T13:25:32.310 に答える