トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
VisualStudio
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ Comment.別エラー対処



___

■ cl.exe.の起動中に.Error.が発生しました

原因 何かの理由で VisualStudio の PATH がとおっていない VC/bin/cl.exe
___

■ オーバーロードされた関数functionのC.リンケージの2回以上の宣言は許されません

オーバーロードされた関数'function'のC.リンケージの2回以上の宣言は許されません DESC extern "C" void foo(); extern "C" void foo( int ); overload func を非修飾にすることはできないということ
___

■ PROJ0019

ProjectBuildError たとえば Build.前のイベントにエラーがある 呼び出し先のどこかでエラーを起こしている
___

■ LINK_ERROR

___

■ LNK2005

MESSAGE 既に MSVCRT.lib(MSVCR80.dll) で定義されています SYNTAX Symbol( 本名 )は Object で定義されています。 DESC リンク時に複数のモジュールで同名のシンボルがある時に発生する。 main.cpp に void func() がある
    void func(){
      printf( "main func()" );
    }
    int main() 
    {
      // func() をコールする。
      func();
      return 0;
    }
module.cpp にも同名の void func() がある。
    void func(){
      printf( "module func()" );
    }
リンカーがどちらの func() を利用すればいいか分らないのでエラーとなる。 名前が重複しないようにすれば解決する。
    cl   main.cpp   module.cpp
リンク時に以下の理由で発生するエラー。
    // 自作のModule
    -------------
    A.obj
      MSVCRT.lib  // Complile 時の指定で埋め込まれている ( 動的 LINK する予定 ) 
                   
    -------------

    // 他からひろってきた Module
    -------------
    module.obj
      MSVCRT.lib  // 別の Object は静的 LINK する予定
                   
    -------------
Linkerからすると、どちらのlibを利用すべきか分らないことになる。 解決方法 1. 自分のつくった Obj の CRT のリンク先を よその Module の CRT のリンク先にあわせる 2. 自分のつくった Obj の CRT のリンク先と同じものを指す Module を LINK する
___

■ LNK4098

DESC リンクする CRT ライブラリの指定がモジュールごとに異なっている。 例えばデバッグ版とリリース版が混ざっていると発生する。
    // リリース版を指定
    cl /c  /MD  main.cpp

    // こちらは デバッグ版を指定
    cl /c  /MDd module.cpp
    link  main.obj  module.obj
解決するには、すべてのコンパイル単位で CRT の指定をそろえる。
    cl /c  /MD  main.cpp
    cl /c  /MD  module.cpp

    cl /c  /MDd  main.cpp
    cl /c  /MDd  module.cpp

    cl /c  /MT  main.cpp
    cl /c  /MT  module.cpp
実際におきるケースは既にあるコンパイル済みの外部ライブラリをリンクするときに発生する。 POINT Compile した obj ( Library )を link するときに CRT の指定が統一されてないとおきる 外の Library だけではなく, わざと cpp 単位で設定をかえるとおきる
    LINK : warning LNK4098: defaultlib 'LIBCMT.lib' は他のライブラリの使用と競合しています
    /NODEFAULTLIB:library を使用してください
C, C++でよく使う printf() はコンパイルしてライブラリという形で用意されてる 必須のライブラリをランタイムライブラリという POINT
    Runtime Library とは必須の Library ( よく使う Library ) のこと
デバッグ用とかマルチスレッド用、MFCを使う場合、DLLを使う場合などでライブラリを変える必要がある どのライブラリとリンクするかは VisualStudioでプロジェクトがやってくれるので大抵は気にする必要はない 何か別のライブラリを使いたいという場合に面倒になる そのライブラリがリリース用の libcmt.lib とリンクするように指示が組み込まれていて でもデバッグしたいから自分はlibcmtd.libとリンクしたい場合に問題になる そのライブラリのlibcmtd.libとリンクするバージョンを用意すれば解決する そこで libcmt.lib とリンクさせないようにする VCで他の Lib( obj ) をリンクするメッセージが出る LINK : warning LNK4098: defaultlib "msvcrtd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください LINK : warning LNK4098: defaultlib "nafxcwd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください LINK : warning LNK4098: defaultlib "libcmtd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください よく、「スタティックライブラリでMFCを使用」と出ていたので、「共有DLLでMFCを使用」に変更していたが ランタイムライブラリが VisualStdio で シングルスレッド マルチスレッド(DLL) マルチスレッド で3種類。デバッグ、リリース版で計6種類用意 、 MSVCRT.lib マルチスレッド(DLL) Release /MD(コンパイルオプション) MSVCRTd.lib マルチスレッド(DLL) Debug /MDd LIBCMT.lib マルチスレッド Release /MT LIBCMTd.lib マルチスレッド Debug /MTd ------------------------------------------- VS2005 からはない LIBC.lib シングルスレッド Release /ML LIBCd.lib シングルスレッド Debug /MLd コンパイラーオプションでの設定は
  「プロジェクトの設定」 > 「C/C++」 > カテゴリ「コード生成」
POINT ライブラリで作成したときにリンクしたランタイムライブラリと 現在のアプリで使用している RunTimeLibrary で異なっているためにエラーが出ている ライブラリのソースコードがあれば コンパイルオプションをアプリと同じオプションに変え作成しなおせば直せる ソースコードがなければ、ライブラリのオプションにアプリを合わせないとだめ アプリが 「マルチスレッド」 ライブラリが「マルチスレッド(DLL)」の場合 警告は出るが、使える。 POINT Library 側ですべての 構成を用意すること
     \md\test.lib
     \mdd\test.lib
     \mt\test.lib
     \mtd\test.lib
使う側では
    test.lib

    LibraryPath で読込先を変更する

    // Release 版
    /mt

    // Debug 版
    /mtd
LINK : warning LNK4098: defaultlib ' MSVCRT ' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 /data/tool/vc2005/VC/bin/mt.exe /nologo /manifest debug/win32beep.exe.manifest -outputresource:debug/win32beep.exe
















NINJAIDX 15