• 締切済み

ダイナミックリンクライブラリ

さっき質問した続きなんですけど ダイナミックリンクライブラリって何なんですか? そこにbinkw32.dllを入れればできるようになるんですか? できれば詳しくお願いします。

みんなの回答

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.2

ダイナミックリンクライブラリというのは、サブルーチンをまとめたモジュールだ。 (質問主殿はこの説明ではチンプンカンプンだと思うが) 質問する際には、普通  xxxをxxxしたらxxxという結果になった。xxxするにはどうすれば良いですか? と訊くものだが、質問主殿は"xxxをxxxしたら"の部分を端折って質問している。 端折らないでちゃんとその部分を回答者側に伝えていれば、問題の解決に繋がるもっと違った回答を得られる可能性が高いのにだ。 問題の箇所の一部の情報のみを切り出して質問するのは、その一部だけ分かれば自分で解決することの出来る人だけがやっていいことで、今回の質問者殿の場合はちゃんと全ての情報を回答者側に提供しないと駄目なのではと思うよ。

関連するQ&A

  • 静的リンクライブラリについて

    WindowsのライブラリにDLLやLIBといった形式があり、それぞれ「動的リンクライブラリ」「静的リンクライブラリ」となっていますが、 静的リンクライブラリとしてビルドされたライブラリを、動的に実行プログラムにリンクさせることは(Cやアセンブラなどの)実装次第で可能なのでしょうか? ビルド時にリンカがやってくれてることを実行時に行えればOK・・・という素直な話ではないのでしょうか。DLLも実行時にGetProcAddress()などを使ってアドレス解決をするわけですし、LIBでも同じことをするのは不可能ではないのでは?と思ったのです。 ※動的/静的リンクの概念や具体的な使用方法などはネット上で調べることができましたが、中身にまで踏み込んだ解説をしているページには巡り合えませんでした。そういう具体的な解説のあるページの紹介だけでもとても助かります。また、「根本的に思い違いをしてるんでは?」というご指摘も非常に助かります。 ※私自身↑に対する需要はないのでコスト・メリットとかは度外視です。興味本位というやつです。 ※別段、Windowsやライブラリの形式にこだわりがあるわけではないですが、これが一番メジャーだろう、ということでWindowsのDLL/LIBを対象に質問させて頂きました。 よろしくお願いします。

  • ライブラリ内の処理中におけるライブラリリンクについて

    VC2005を使用しています。 ライブラリからライブラリファイルって使用できるんでしょうか? (例) A.lib内の処理に、B.DLLを明示的に読み込み処理 ----------------- <A.lib内の処理> hDLL = LoadLibrary("B.dll"); // DLLのロード if (hDLL != NULL) { ~ 処理実行 ~ } ----------------- 私の環境で何度やっても、GetLastErrorにて、 "7E"(ERROR_MOD_NOT_FOUND)が出力されます。 ロードしているパスに、B.dllは必ずあります。 上記の例は明示的リンクですが、暗黙的リンクでもかまいません。 ライブラリ処理の中でライブラリファイルを使用するには、 どうすれば良いでしょうか。 もしかして、ライブラリ内で他のライブラリを使用できない 等のオチもあるのでしょうか...。

  • ダイナミックリンクライブラリ

    Win98を使ってます。 PCを起動させた時にエラーがでます。 「PowrProf.dllを読み込み中にエラーが発生しました」 「ダイナミックリンクライブラリ初期化ルーチンに失敗しました」 とでます。 解決方法をわかりやすく教えていただけないでしょうか。 そのあとは普通に使えるんですが 文字が小さくなったり文字化けしたりするのです。 よろしくお願いします。

  • ダイナミックリンクライブラリ 実行 失敗

    「ダイナミックリンクライブラリ(DLL)初期化ルーチンの実行失敗」って、何が原因でしょうか?

  • 静的/動的リンクライブラリについて

    Pythonのctypesを使っていてふと気になったので質問させていただきます。 Cと少々Java、程度の経験しかなかった私にとって、ctypesによって「Cのデータ型を利用できる」「dllをロードして、エクスポートされている関数を使用できる」というのは衝撃でした。 しかし、考えてみれば、仕組みとして理解できなくもない・・・かな?と現在は思っています。 ただ気になったのは、  ・どうして静的リンクライブラリ(.lib)の方は対応してないの? ということです。 [質問1]これは原理的に不可能なのでしょうか、それともctypesやPythonの仕様としてできないだけなのでしょうか。 (おそらくは「原理的に不可能」なのだろう、と個人的には思っておりますが・・・。) 以下は私の中の解釈ですが、 ・マシン語として実行可能な形式になっているdllは、実行時のリンクの機構さえ整っていれば別にC言語でなくともロードや中身のコードを利用することはできる。 ・また、Cのデータ型についても、要は型のバイト数やフォーマット(つまり内部的な扱われ方)をPythonインタプリタが押さえていれば良い話であるから、PythonでCの型を使用することは原理的に可能。 さて、 [質問2]それではlibはどうか。 libもコンパイル済みのものであるなら、Python(またはC以外の言語)からlib内のコードを利用することはできるのではないか? どちらかのみの回答でも結構です。 また、解釈の誤りについてのご指摘や、リンクライブラリの仕組みを解説したページを教えてくださると助かります。 よろしくお願いします。

  • crtLCMapStringWがダイナミックリンクライブラリmsvcr

    crtLCMapStringWがダイナミックリンクライブラリmsvcrt.dllから見つかりませんでした。 プリンター(HP製品)、CDRW(Panasonic製品)のセットアップ時に「プロシージャエントリポイント _crtLCMapStringWがダイナミックリンクライブラリmsvcrt.dllから見つかりませんでした」のエラーが表示します。 msvcrt.dllは存在するのですが・・・。 (c:\winnt\system32\,c:\winnt\servicepackfiles\i386) どうすれば、このエラーメッセージが消えるでしようか? 機種:TP_X23 OS:Windows2000+SP4

  • ダイナミックリンクライブラリについて。

    実行ファイルとは別に ダイナミックリンクライブラリというファイルがあって 実行時に メモリー上でこれらがリンク(連結)されて実行されます。 実行するたびにリンクするからダイナミックリンク(動的リンク)と呼びますが 反対に、実行ファイル作成した時点でライブラリもリンクしてあるのなら、 スタティックリンク(静的リンク)です。 スタティックリンクの場合、実行ファイルのサイズもそれだけ大きくなります。 と、プログラムというのは、階層構造です。 表面上に見えている機能は、プログラムそれぞれで違いますが どんなプログラムでも、ファイルの読み書きや画面の制御といったことは 行っています。 こういった階層構造の底辺の部分は、わざわざ自分で作らなくても 先人が作ってくれたもの(ライブラリ)を使い回せばよいのです。 で、疑問点が、2つあって①ダイナミックリンクライブラリとは、実行ファイルとダイナミックリンクライブラリというファイルが同時に実行される(まとめて)ということでしょうか? ②スタティックリンクで、実行ファイルのサイズもそれだけ大きくなる。とはどういうことでしょうか? ご教授頂けると幸いです。

  • ダイナミックリンクライブラリー SwDll.dll が見つかりません。

    お世話になります。 windowsにて、あるソフトを実行しようとした際、 ダイナミックリンクライブラリーSwDll.dllが、 パスに見つかりません。というエラーメッセージが 出ます。 どちらかで入手して、投入できるものでしょうか? 宜しくお願い致します。

  • ダイナミックリンクライブラリについて。

    ダイナミックリンクライブラリで、共通な処理(サブルーチン)を集めたプログラムです。という回答を頂いたのですが。どういう事でしょうか?ご教授頂けると幸いです。すみませんが。 結局、そのダイナミックリンクライブラリには、全てのソフトで、共通する処理をその中にまとめて、その中から、ファイルを開くということを呼び出すということでしょうか?ご教授頂けると幸いです。すみませんが。

  • Qtライブラリを静的にリンクしたい

    Qt 5.11.0 を使ってGUIアプリをつくろうとしているのですが、実行時の問題があります。 ソースは初心者用のサンプルソースコードで、Qt Creator を使って以下の「main.cpp」を作成しました。 #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ウインドウ生成は「mainwindow.cpp」で、 #include "mainwindow.h" #include <Qtgui> #include <QtWidgets> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QLabel *label = new QLabel(tr("Hello World.")); setCentralWidget(label); } MainWindow::~MainWindow() { } となっています。 これをビルドして、Qt Creatorから実行するとウィンドウが表示されます。 しかし、単独で(ダブルクリックで)実行しようとすると 「コンピューターにQt5Cored.dllがないため、プログラムを開始できません。・・・」 というシステムエラーが表示され、実行できません。 これ以外に、mingwとmake を使って別のサンプルソースをコンパイルしても同様のエラーが出てきます。 実行ファイルと同じディレクトリにQt5Widgets.dll、Qt5Core.dll、Qt5Gui.dllの3つのDLLをコピーすると、実行できます。 しかし、いちいちDLLを要請するプログラム構成は好きでないのと、同名のライブラリlibQt5Widgets.a、libQt5Core.a、libQt5Gui.aがあることから、できれば静的にリンクしたいと思っています。 静的にリンクするために以下の4つの方法を試してみましたが、ことごとく失敗しています。 方法1 ライブラリを指定してリンク g++ -static -O0 -g -o Qt_test.exe Qt_test.obj -lmingw32 -LC:\Qt\5.11.0\mingw53_32\lib -lQt5Widgets -lQt5Core -lQt5Gui -lqtmain -LC:\utils\my_sql\my_sql\lib -LC:\utils\postgresql\pgsql\lib -lshell32 のような書式で、3つのライブラリの順番を入れかえて6パターン試しましたが、DLLエラーは変わりません。 方法2 ライブラリをld.exeでまとめたオブジェクトファイルを作ってリンク 「GNUソフトウェアプログラミング」という本の112ページにリンカ「ld」のオプションについての記述があり、オブジェクトファイルとライブラリ同士をリンクする方法が紹介されていたので試してみましたが、未解決の参照がない?のか、20バイトのファイルが出力されただけでした。 ld -static -r -o qtobj.o C:\Qt\5.11.0\mingw53_32\lib\libQt5Gui.a C:\Qt\5.11.0\mingw53_32\lib\libQt5Widgets.a C:\Qt\5.11.0\mingw53_32\lib\libQt5Core.a ld -static -r -o qtobj.o -LC:\Qt\5.11.0\mingw53_32\lib -lQt5Gui -lQt5Widgets -lQt5Core 方法3 arでオブジェクトファイルを作る ar rs qto2.a C:\Qt\5.11.0\mingw53_32\lib\libQt5Gui.a C:\Qt\5.11.0\mingw53_32\lib\libQt5Widgets.a C:\Qt\5.11.0\mingw53_32\lib\libQt5Core.a でライブラリをまとめたファイルは作れるのですが、コンパイルするとリンク時に qto2.a: error adding symbols: Archive has no index; run ranlib to add one となり、うまくいきません。 方法4 Qt creator で静的リンク Qt Creatorで「ライブラリの追加」を行うと、「HelloWrold.pro」に以下の行が加わり、リンクできそうなのですが、実行時にやはりDLLを要求されます。 LIBS += -LC:/Qt/5.11.0/mingw53_32/lib/ -lQt5Core 結局は、Qtで静的なリンクを行う方法が知りたいのです。 ご助言をお願いいたします。 環境は、Win7、Mingw、QtはMingwパッケージオプションを付けてインストールしており、 「C:\Qt\5.11.0\mingw53_32\lib\libQt5Core.a」 「C:\Qt\5.11.0\mingw53_32\include」 「C:\Qt\5.11.0\mingw53_32\bin\Qt5Core.dll」 があり、中にDLLもライブラリもあります。 よろしくお願いします。