DLL作成で外部参照エラー?

このQ&Aのポイント
  • 現在VC++2010で動的ライブラリ(DLL)を作ろうとしていますが、作成しようとしているDLL内部で使用している関数がLIB提供されていません。
  • DLLを作ろうとすると、関数が外部参照エラーになる可能性があります。この場合、/FORCEオプションを使用して強制出力するか、VC++側の設定を変更することでエラーを回避できるかもしれません。
  • linuxでは単純にcc -shared -o foo.so foo.cというコマンドでシェアードライブラリを作成できますが、VC++では状況が異なるため困惑しています。
回答を見る
  • ベストアンサー

DLL作成で外部参照エラー?

VC歴1週間です。 現在VC++2010で動的ライブラリ(DLL)を作ろうとしていますが、 作成しようとしているDLL内部で使用している関数がLIB提供されていません。 このような場合、win32プロジェクト→dll作成 を選択した状態でプロパティ変更しないで、 DLLを作ろうとするとその関数が外部参照エラーになるかと思います。 このような場合、/FORCEで強制出力してしまって良いものでしょうか? それともVC++側の設定でエラーにならずDLL生成ができるようになるものでしょうか? linuxなら cc -shared -o foo.so foo.c でライブラリ等何も気にせずシェアードライブラリが作れたので困惑しています。 よろしくご教示お願いいたします。

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

ネットで検索するとdllからlibを生成する方法が見つかりますよ。

関連するQ&A

  • 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を動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • vc++6.0にてdllとlibraryを作成する方法

    vc++6.0にてdllとlibraryを作成する方法 を知りたいのですが、dllとlibraryを それぞれ新規プロジェクトで立ち上げれば 作成できるのですが、dllを作成した際に libraryも作成(自動)されるようなことは できないのでしょうか?

  • DLLについて

    VC++でDLLを作成しようとしているのですがいくつか判らない点があります。 1. スタティックライブラリとスタティックリンクライブラリの違い。この二つの用語の違いが分かりません。 2.VBからVC++で作成したDLLを使用するときには.libファイルは必要ないのでしょうか。使用しなくても、使うことができたので。

  • error LNK2001: 外部シンボル "_main" は未解決です

    VisualC++6.0で、新規作成→win32 Dinamic-Link Libraryでプロジェクト を作成し、dllファイルを作っています。 今までは、上手くコンパイル出来て、dllを作れていました。 友人の作ったライブラリにリンクして、ソースファイルで そのライブラリの関数を使って、コンパイルすると、 LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です。 というエラーが出て困っています。 今、プロジェクトの設定→リンク→アウトプットの エントリポイントシンボルはDllEntryPoint@12となっています。 どうしたら良いでしょうか? どなたかご教授くださると助かります。 ちなみに、ライブラリの関数をコメントにすると、コンパイル出来ます。

  • DLL内からの外部変数の参照

    BCC(フリーコンパイラ)で、WindowsAPIを使った プログラムを作成しています。その過程で、DLLを 作成しているのですが、 test.c を、 bcc32 -WD test.c とし、test.dllを作成しました。 さらにそれを、 implib test.lib test.dll で、test.libを作成ました。 ところが、おなじtest.cファイルで、ほかのファイル の変数を参照しようとして、extern HWND hWnd と書き加えたところ、bcc32 -WD で、参照先が見つか らないというエラーが起こり、DLLが作成できなく なってしまいました。 DLL内から外部の変数を参照するにはどうしたらよいで しょうか。この場合の外部の変数というのは、WinMain 関数のあるmain.cファイル内の静的変数です。 よろしくお願いいたします。

  • .NET VC++ DLLの作成方法

    以前VC++6.0でDLLを作成しました。 このときに新規作成の項目からWin32 Dynamic Link Libraryを 選択して作成したのですが、 .NET2003で同様のものを作成したい場合 どのプロジェクトから作成するとできるのでしょうか? .NETになったことで仕様が変更されて同じようにDLLを作成することは できませんか? どなたかお教えください。よろしくおねがいします。

  • VB6から参照可能なDLLの作成

    VB6から参照可能なDLLの作成を参考書をみながらしましたが、上手くいかない為質問させていただきます。 開発環境VC++ 2005 C++ CTEST.dll #include <windows.h> __declspec (dllexport) int __stdcall test(int i) { i = i + 5; return i; } .defファイル LIBRARY "test" DESCRIPTION EXPORTS A 以上でDLLを作成し、VB6側で Private Declare test Lib "CTEST.dll" (ByVal i as integer) で宣言しても「エラー53 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。 直すべき点はどの部分なのでしょうか? ご教示ねがいます。

  • dllの作り方

    環境 WIN98 VC++6.0 MFC にて 猫でも~において 161章でdllを作りましたが、xxx.dllファイルは作成されますが、xxx.libが作成されません。 162章では両方作られ問題ありません。 作り方は、 メニューから「ファイル」「新規作成」「プロジェクト」(タブ)を選択します。そこから「Win32 Dynamic-Link Library」を選びました。 どうすればxxx.libが作られるのか教えてください。 161章 http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm 162章 http://www.kumei.ne.jp/c_lang/sdk2/sdk_162.htm

  • BCBでVC++のDLLを利用するために

    C++Builder5で、VC++で作ったDLLを利用する必要に駆られてしまいました。 提供されているのはDLL本体とヘッダの2点で、BCBからリンクするために、implibを使ってdllからlibの作成をし、プロジェクトに加え、ヘッダをインクルードしました。続けて試しにコードを書いたところ、 '外部シンボル_initialize_libraryが未解決' との表示。(initialize_libraryとはDLL内にある関数です。) 調べてみたところ、 1.呼び出し規約は標準で __stdcall 2.VC++ では、_ がシンボル名の頭に付く 3.Builder ではつかない これで食い違いが生じているんだと思うのですが、更に調べると、モジュール定義ファイルにて再定義をすれば良いとの結論になりました。 BorlandのFAQも見たのですが、書式が理解できなくて・・・そこで質問させて頂きたいのですが、単純にproject名.defを作って、 >IMPORTS >initialize_library=_initialize_library とやってプロジェクトに加えれば良いのでしょうか? ソース本体にextern "C" というのも必要なようですが、こちらの記述も教えて頂けたら嬉しいです。

  • C++での静的ライブラリの作成方法

    C++での静的ライブラリの作成方法 今まで独学でC++を勉強してきたのですが、既存ライブラリのラッパーを作りたいと思います そこで、色々なサイトなどで調べてみたのですが、いまいちライブラリというものについて納得の出来る解説のあるサイトが見つからなかったので、質問させて下さい まず私が元にするライブラリの構成は hoge.h foo.lib bar.lib となっており、その関数などを使用する独自型のクラスや、それをさらに扱うクラスなどを作っています その場合、ふたつのクラスをひとつのlibファイルに一緒にしてもいいものなのか、 はたまた分けてそれぞれlibファイルにするのか、 複数できたヘッダはプロジェクトに追加するときどれを入れるのか、 インクルードやリンクはどこに張ればいいのか、 libファイルにヘッダは含まれているのか、など 基本的なことが全然わからず、身近に聞ける人もいなくずっと手探り状態です よろしければ全体のファイル構成や作り方、使い方などの基本的なことから教えて下さい あと別件なのですが、クラスのインスタンスが生成されたときにメンバ変数はメモリに動的に配置されると思うのですが、メンバ関数はどうなるのでしょうか? インスタンスごとに同じく生成されるのか、宣言の時に既に一箇所に用意されていて、毎回そこに飛ぶのでしょうか? よろしくお願いします!

専門家に質問してみよう