• 締切済み

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 をビルドすると、上記の警告が表示される。

みんなの回答

  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.1

試しにdllを新規プロジェクトのファイルのあるディレクトリないしは、Debug,Releaseのあるディレクトリにコピーしてもらえませんか? あと、libの指定も入っていることを確認してlibもコピーしてもらえませんか?

miki_rise
質問者

お礼

長い時間が過ぎたので、質問を締め切ることにします。

miki_rise
質問者

補足

リンク時の警告なので DLL ファイルは関係ないです。 それから、LIB ファイルの指定が抜けていたら、リンクエラーが発生するので、これも抜けてはいません。

関連するQ&A

  • 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()関数が呼ばれるか不明で、それが正しいのかも心配です。

  • VC++6.0ビルド後の処理で黙り込み

    VC++6.0でDLLを作ったのですが、 プロジェクトの設定でビルド後の処理に copy debug\dll.dll c:\usedll\debug\dll.dll のようにしてリビルドたところ ----------------------------------------------- ................. コードを生成中... リンク中... ライブラリ Debug/MfcDll.lib とオブジェクト Debug/MfcDll.exp を作成中 ビルド後の処理 ----------------------------------------------- ここでビルドが固まってしまいます。 ビルドの中止を押しても復帰せず、VC++を閉じようとしてもビルド中はダメとおこられます。 Ctrl+Cでもダメです。 何度やっても再起動しても確実に止まります。 copy じゃなくてdirとかでも止まります。 ビルド後の処理を外せばちゃんとビルドできます。 なにか心当たりのある方いらっしゃいましたらアドバイスお願いいたします。

  • スタティックリンクライブラリで2重リンクできる?

    スタティックリンクライブラリで2重リンクをしようとすると、warning LNK4006が発生してしまいます。 メッセージ: "~で定義されています; 2 つ目以降の定義は無視されます" 例えば、 aaa.libがbbb.libとccc.libをリンクしてて、bbb.libとccc.libはそれぞれddd.libをリンクしているとします。*.libはすべてスタティックリンクライブラリで提供を考えています。   [ aaa.lib ]    |   | [bbb.lib] [ccc.lib]   |     | [ddd.lib] [ddd.lib] 調べてみると「ライブラリーを結合する時に,このエラー・メッセージが表示された場合,ライブラリーに既に存在しているシンボルを追加しようとしています。」ということで、要は"ddd.lib"が重複してリンクされているという事のようなのですが、原因ばかりで解決策が分かりません。 LNK4006の解決法が分かれば良いのですが、最終的にはこの構成で"aaa.lib"だけで提供するようなライブラリを作成したいです。実現するためにはどのようにしたら良いのでしょうか?アイデアを頂けたら助かります。また詳しい方がいらっしゃいましたらご教授お願いいたします! ※Windows2000でVisualStadio.NET2003を使用してます。

  • 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 何方か教えて頂けないでしょうか、宜しくお願いいたします。

  • 【VC++6.0(MFC)】警告「LINK : warning LNK4075:」の対処方法を教えてください。

    いつもお世話になっています。 VC++初心者です。 先人が残したVC++6.0のMFCのソースをリビルドすると 以下のような警告がでます。 ***** コードを生成中... リンク中... LINK : warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます ***** リンクがうまくできていないようですが、この対処の仕方を教えていただけませんでしょうか。 よろしくお願いします。

  • DLL呼び出しAPのリンクエラーについて

    DLL作成初心者です。 当方で簡単なDLLを作成しました。 試しに、下記の呼び出しAP(EXE)を作成しようと したのですが、リンクエラーになります。 どうしてでしょうか? 呼び出しAP #include <windows.h> int main(){ static HINSTANCE hDLL; hDLL = LoadLibrary(TEXT("DLL_TEST.DLL")); if (hDLL) FreeLibrary(hDLL); return 0; } リンクエラーは下記 IBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/TEST.exe : fatal error LNK1120: 外部参照 1 が未解決です また上記"_WinMain@16"のライブラリーをリンクさせると SCRNSAVE.LIB(scrnsave.obj) : error LNK2005: _main はすでに test.obj で定義されています SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverConfigureDialog@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_RegisterDialogClasses@4" は未解決です Debug/TEST.exe : fatal error 等のエラーになります。 解決策を教えてください。

  • BCBで作成したDLLを、VC++で静的リンクさせる方法

    BCBで作成したDLLを、VC++で静的リンクさせる方法 Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように LIBファイルに変換したいのですが、上手くいきません。 下記の手順を踏みました。 1. BCBでDLL作成   「VC++スタイルのDLL」で作成、   「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず 2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成   (IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた) 3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成   (LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた) 4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー 5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に   作成したlibファイルを追加 VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ///////////////////////////////////////////////////////////////////////////////// BCBとVC++のバージョンは、下記の通りです。 BCB Professional 6.0 VC++ 6.0 ちなみに、同じDLLを動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • SQLLIB80.DLLリンクの警告について

    VCでCGIを作成しています。 Pro*Cを使用しているのですが、ビルドする時に以下の警告が発生します。 「LINK : worning LNK4089: "sqllib80.dll" へのすべての参照は /OPT:REF によって廃棄されます」 ちなみに ビルド→アクティブな構成の設定 で Win32 Debug にすると警告は出ないのですが、 Win32 Release にすると上記の警告が発生します。 見たところ、設定等はDebugとReleaseで全く同じです。 どなたかお分かりになる方がいらっしゃったら よろしくお願いします。

  • VC++6.0からVC++.NET2005へ移植

    VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

  • CLapack C++

    現在、C言語の中で疑似逆行列を用いた最小2乗法によって データの処理を行いたいと考えています。 そのためにCLapackという線形演算ライブラリを visual studio 6.0に組み込みたいのですがうまくいきません。 研究で、ADボードやロボットマニピュレータを使うために  Win32 Application で自分でプログラムを書いています。 Win32 Console Application にCLapackを組み込む事は、 http://www.alab.t.u-tokyo.ac.jp/~bond/doc/clapack.html​ を見てうまくいったのですが、Win32 Applicationで組み込もうとすると、以下のようなエラーがでます。 リンク中... LINK : warning LNK4049: ローカル定義のシンボル "_free" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_fprintf" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "__iob" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_malloc" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_exit" がインポートされました clapack.lib(dlamch.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です clapack.lib(xerbla.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー プログラムに関する知識が乏しいため、解決できません。 またmath.hをインクルードすると大量のエラーがでます。 CLapackについて詳しい方がいらっしゃいましたら、 どうか教えていただけないでしょうか? よろしくお願いします。

専門家に質問してみよう