LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library

このQ&Aのポイント
  • Win98 VisualStadio6.0を使用したC言語とFORTRAN言語のプログラムで、warning LNK4098が発生する現象に遭遇しています。
  • Cで作ったメインの中で呼び出すフォートランのスレッドを作成した際に、リンクエラーが発生しました。
  • プロジェクト設定のリンクタブで無視するリンクライブラリを設定しても、同じエラーが発生しました。
回答を見る
  • ベストアンサー

warning LNK4098で試行錯誤しています

環境はOS:Win98 VisualStadio6.0を使用して作成しています。作成言語はC言語とFORTRAN言語です。FORTRANのコンパイルははVisualFortoranをインストールしています。 現象は、Cで作ったメインの中でフォートランを呼ぶCのスレッドを_beginthreadを使って作成しています。この状態でビルドすると「warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library」が出ます。そこで、プロジェクト設定のリンクタブで無視するリンクライブラリを以下のように設定してビルドしましたが。同じ現象でした。 無視するライブラリ:libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib 何方か教えて頂けないでしょうか、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

シングルスレッド用のCランタイムライブラリをリンクしているのでは? http://www.microsoft.com/japan/developer/library/vccore/_crt__beginthread.2c_._beginthreadex.htm LIBCMT.LIBとMSVCRT.LIBは無視してはいけないはずですが。

kuro39
質問者

お礼

taka tetuさんありがとうございました。返事がおそくなりすみません。おっしゃる通りLIBCMT.LIBとMSVCRT.LIBは無視できないこと分りました。そこでbeginthreadではなくcreatethreadを使ってみることにしました。

関連するQ&A

  • VC++でビルド時の、リンク警告 LNK4006、LNK4221 を消したい

    こんにちは。 先週から仕事で Visual Stadio 2005 を使用して、C言語 でプログラムを書いています。 コードをビルドする際、ライブラリ作成時に以下の警告がでます。 1>Dynamic_02.lib(Dynamic_02.dll) : warning LNK4006: __NULL_IMPORT_DESCRIPTOR は Dynamic_01.lib(Dynamic_01.dll) で定義されています。2 つ目以降の定義は無視されます。 1>Dynamic_02.lib(Dynamic_02.dll) : warning LNK4221: パブリック シンボルが見つかりませんでした。アーカイブ メンバにアクセスできません。 これらの警告を消す方法はないですか? 以下は手順の詳細です。 1. 動的リンクライブラリ、Dynamic_01.dll を作成した。 同時にインポートライブラリ Dynamic_01.lib が作成される。 2. 動的リンクライブラリ、Dynamic_02.dll を作成した。 同時にインポートライブラリ Dynamic_02.lib が作成される。 3. Dynamic_01.dll と Dynamic_02.dll の両方の関数を使用する、 静的リンクライブラリ、Static_01.lib の作成を試みた。 追加の依存関係に Dynamic_01.lib と Dynamic_02.lib を指定し、 Static_01.lib をビルドすると、上記の警告が表示される。

  • FortranからCの関数を呼ぶ方法

    お世話になります。 標記件、以下の通り行っていますがうまくいきません。どなたかご存知の方おりましたらご教示下さい。よろしくお願いします。 (1)環境 ・Windows XP SP2 ・Compaq Visual Fortran Professional Edition 6.5.0 ・Visual C++ 6.0 Enterprise Edition (2)作業方法 ・Visual C++ を立ち上げ、その中でCプログラムとFortranプログラムのファイルを作成し、作業。 (3)現象 ・ビルドしようとすると以下のエラーが発生し、EXEが作成されない。 ------------------------------- Linking... LINK : warning LNK4098: defaultlib "libc.lib" conflicts with use of other libs; use /NODEFAULTLIB:library test01.obj : error LNK2001: unresolved external symbol _TEST@0 Debug/system.exe : fatal error LNK1120: 1 unresolved externals -------------------------------  ・個々のファイルのコンパイルは問題なし。 (4)ソース内容  --- Fortranプログラム"test01.f90" --- PROGRAM FileRW call test END  --- Cプログラム"system.cpp" --- #include <stdio.h> void test_(void) { printf("TEST PROGRAM!!"); } 以上

  • LIBCMT.LIBをリンクしてコンパイルすると警告が。

    LINK : warning LNK4098: defaultlib 'LIBC' conflicts with use of other libs; use /NODEFAULTLIB:library というのがでるんですけど、もともとリンクしているLIBCというライブラリ?と、関数がかぶってしまっているためなんでしょうか。 /NODEFAULTLIBオプションを使え?みたいなことを言ってますが、 cl /? で調べてもそんなオプションありませんし。 この場合の解決法のご教授をお願いします。

  • ライブラリファイルのリンク (リリースバージョン時)

    VisualC++ 2005 Express Editionでライブラリファイル(.lib)をリリースバージョンでビルトし、違うプログラム(デバックバージョン)でライブラリファイルをリンクしたとき 1>コンパイルしています... 1>main.c 1>リンクしています... 1>CheckMemory.lib(check_memory.obj) : MSIL .netmodule または /GL を伴ってコンパイルされたモジュールが見つかりました。/LTCG を使用して再開始してください。リンカのパフォーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。 1>LINK : warning LNK4075: /INCREMENTAL は /LTCG の指定によって無視されます。 1>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 と出るのですが、これはどうゆうことなのでしょうか? 分かる方いらっしゃいますか?お願いします。 ちなみにライブラリファイルは簡易メモリチェックプロブラムでデバック時のみ使用したいと考えているプログラムです。 使用言語はc言語です。 文章下手ですみません^^;

  • MISTのLAPACKの環境設定ができない

    こんにちは.質問させていただきます. 画像の主成分分析を行いたいと思っており,調べたところMISTというライブラリを用いれば用意にできるそうなので,早速使ってみました. しかし行列演算を行うためのLAPACKというものがうまく環境設定できていないようで,大量のエラーが出て困っています. 手順は下のURLのpdfに従い行っておりました. http://mist.suenaga.cse.nagoya-u.ac.jp/pdf/MIST_no_susume.pdf 環境設定もこのpdfの19ページに従い行いました. 上記のpdfのとおりにサンプルプログラムを順番に動かしてみたら,画像の入出力などは正常にできました. が,17ページのサンプルプログラムを実行しようとすると,以下のようなエラーが大量に出てしまいます. ===================================================== 1>MSVCRT.lib(ftol2.obj) : error LNK2005: __ftol2 は既に libF77.lib(ftol2.obj) で定義されています。 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRT.lib(MSVCR100.dll) で定義されています。 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRT.lib(MSVCR100.dll) で定義されています。 (中略) 1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRT.lib(MSVCR100.dll) で定義されています。 1>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 1>C:\Documents and Settings\(ユーザ名)\My Documents\Visual Studio 2010\Projects\test\Debug\test2.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 ===================================================== 使用環境はWindows XP,Visual Studio2010です. プログラミングは初心者です. .NETというものがよくわからないので,Visual Studioを使っているのですが,これが問題でしょうか?Visual Studioではできないのでしょうか?(画像の入出力などは正常に処理できたので,LAPACKの設定がうまくできていないだけだと自分では思っているのですが・・・) どなたか詳しい方がいらっしゃいましたら,教えてください. よろしくお願いいたします.

  • Fortranについて,fatal error LNK1181

    Fortranをインストールしてプログラムをコンパイルしようとすると,以下のエラーが出ます. LINK : fatal error LNK1181: cannot open input file "C:\DOCUME~1\dfor.lib" 正常に作動させるにはどうしたらいいでしょうか.何か足らないものがあるのでしょうか.以下のフォルダに, インストールCDに入っているLIBファイルをすべてコピペしてみたのですが,変わりなしです. C:\Program Files\Microsoft Visual Studio\DF98\LIB OSはXP,今回インストールをしたFortran及びプログラム作成をしたFortranは,共にVisual Fortran 6.0です.何か打開策があれば助言お願いします.

  • リンクエラーについて

    C++の初心者です。 C++で作成したプログラムがリンクでエラーになります。 エラーの内容は、”LNK2019:未解決のシンボル_IoInitが間数XXXXで 参照されました。”です。 IoInit関数を含むライブラリ(C:\JAVAC\ciolib.lib)をリンクする必要があり、リンカの/DEFAULTLIBオプションでライブラリを指定しましたが、状況は変わりません。 リンカの内容は、以下のとうりです。 cl -I:"C:\Program Files\Microsoft Visual Studio 8\VC\include" -I:C:\j2sdk1.4.2_18\include -I:C:\j2sdk1.4.2_18\include\win32 -LD -FeCiolibJNI.dll CiolibJNI.cpp /link -libpath:"C:\Program Files\Microsoft Visual Studio 8\VC\lib" /NODEFAULTLIB:C:\JAVAC\ciolib.lib /DEFAULTLIB:C:\JAVAC\ciolib.libの指定が悪いのか状況は変わりません。それとも、指定オプションが悪いのか困っています。 リンカが悪いのであれば、修正箇所を教えてください。

  • (Visual C++)PGPLOTを導入したいのですが・・・

    PGPLOTというグラフ作成ツールをダウンロードしてC++で ビルドしてみたのですが、「LINK : fatal error LNK1104: ファイル 'LIBC.lib' を開くことができません。」というエラーが出てしまいます。検索して調べてみたところ『libc.libはVS2005から削除され、マルチスレッド用libcmt.libがある。』とのこと。 これはどうやって解決したらよいのでしょうか。 よろしくお願いします。

  • STL使用時のデバッグ設定

    現在C++を使いプログラミングをしています Microsoft Visual Studio 2005を使っているのですが SLTを使用した場合ランタイムライブラリの設定を マルチスレッドデバッグ→マルチスレッドに変更すると エラーが出ることがわかりました。 原因を調べているとSTLを使っているとエラーが出ることまで分かりました。 エラーが出るコードは #include <stdio.h> #include <LIST> using std::list; int main() { list<int> ilist; ilist.push_back(1); return 0; } warning LNK4098: defaultlib 'LIBCMT' は 他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 の警告と共に、 未解決の外部シンボル~が参照されました。 とエラーがでます できればMTでコンパイルが通るようにしたいのですが、良い方法ないでしょうか?

  • VC++でのリンクエラー [error LNK2005]

    VC++でMFCを使用してダイアログベースのEXEを 作成しています。 以下のクラスのメンバ関数などを使用して、色の操作をしています。 CDC::SetBkColor() CDC::SetTextColor() ビルド時、以下のリンクエラーとなりました。 ---------------------------------------------- nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに LIBCMT.lib(delete.obj) で 定義されています Release/MenueTest.exe : fatal error LNK1169: 1 つ 以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー ---------------------------------------------- MFC と C(?)のライブラリで delete()関数が競合しているようですが、これを回避する方法をご存知の方、ご教授願います。 <環境> OS:Windows2000 VC++6.0 <備考> リンクエラーになるのは以下の組み合わせです。 「MFCをスタティックリンクする+リリース版」 MFCをスタティックリンクしてもデバッグ版のビルドだとエラーになりません。 また、MFCをスタティックリンクしない場合もエラーにはなりません。 ただし、リンクエラーにならなかった場合、どちらのオブジェクトの delete()関数が呼ばれるか不明で、それが正しいのかも心配です。

専門家に質問してみよう