18

(私がこれをやろうとしている理由: Windows で libpng のビルド済みバイナリを使用することに失敗したため (何時間にもわたる試行錯誤にもかかわらず)、自分でコンパイルしようとしています。この役立つブログを見つけました)これに関する投稿、Microsoft Visual Studio 2008 プロジェクト ファイルを完備していますが、残念ながらまだ使用できていません。)

ここにある zlib バイナリにリンクすると正常にコンパイルされますが、テスト ファイルにリンクしようとすると、次のメッセージが表示されます。

    C:\Documents and Settings\Administrator\My Documents>cl "C:\Documents and Settin
    gs\Administrator\My Documents\test.c" "C:\Documents and Settings\Administrator\M
    y Documents\libpng.lib" -I "C:\Documents and Settings\Administrator\My Documents\include"

    Microsoft (R) 32 ビット C/C++ 最適化コンパイラ バージョン 15.00.30729.01 for 80x86
    Copyright (C) Microsoft Corporation. 全著作権所有。

    test.c
    Microsoft (R) Incremental Linker バージョン 9.00.30729.01
    Copyright (C) Microsoft Corporation. 全著作権所有。

    /out:test.exe
    テスト.obj
    "C:\Documents and Settings\Administrator\My Documents\libpng.lib"
    MSVCRTD.lib(MSVCR90D.dll): エラー LNK2005: _abort はすでに LIBCMT.lib で定義されています(
    中止.obj)
    MSVCRTD.lib(MSVCR90D.dll): エラー LNK2005: _fread はすでに LIBCMT.lib で定義されています(
    fread.obj)
    MSVCRTD.lib(MSVCR90D.dll): エラー LNK2005: _malloc はすでに LIBCMT.lib で定義されています
    (malloc.obj)
    MSVCRTD.lib(MSVCR90D.dll): エラー LNK2005: _free はすでに LIBCMT.lib(f
    ree.obj)
    MSVCRTD.lib(MSVCR90D.dll): エラー LNK2005: ___iob_func はすでに LIBCMT で定義されています
    .lib(_file.obj)
    リンク: 警告 LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合します。あなた
    se /NODEFAULTLIB:ライブラリ
    test.exe : 致命的なエラー LNK1169: 1 つ以上の複数定義されたシンボルが見つかりました

これらのエラーを修正する方法について、誰かが光を当てることができますか?

4

1 に答える 1

38

問題は、プロジェクト プロパティ -> 構成プロパティ -> C/C++ -> コード生成で、2 つのプロジェクトの一方がマルチスレッド DLLを使用し、もう一方がマルチスレッド(DLL を含まない) を使用していることです。

私に数回起こりました。

リリース ビルドの場合でも、可能な組み合わせ (デバッグ、非デバッグなど) ごとに、その設定を「同期」するようにしてください。

于 2009-12-21T03:05:15.403 に答える