質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

5回答

1551閲覧

すでにある静的ライブラリを共有ライブラリに変換したい

退会済みユーザー

退会済みユーザー

総合スコア0

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2022/02/18 06:35

DXライブラリの静的ライブラリ(.a)を共有ライブラリ(.dll)に変換したいです。
MinGWだけでできるものなんでしょうか。
回答よろしくお願いします。

環境

MinGW-W64 64bit版
Windows 10 Pro Education

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2022/02/18 07:20

どのように試したのでしょうか
退会済みユーザー

退会済みユーザー

2022/02/18 07:36

調べてもどうすればよいかわからなかったので,試せていません
Zuishin

2022/02/18 07:54

DX ライブラリなら Windows 版を使えばいいのでは?
BeatStar

2022/02/18 07:59

> 調べてもどうすればよいかわからなかったので だったら『どのように調べたか』とか『参考にしたサイト』とかを載せてください。回答者は質問者ではないので提示された情報からしか読み取れません。 調べたといっても、『検索ワードが惜しい』とか『検索ワードの方向性が全く違う』とか『そもそも基礎を蔑ろにしているため、読んでも理解できない』とかいろんな可能性があります。 質問は編集できるので編集してください。
jbpb0

2022/02/18 14:23

「mylib_static.lib」というスタティックライブラリから「mylib.dll」を作成するとして、下記でどうでしょうか? (長いけど一行です) g++ -O3 -shared -Wl,--out-implib,mylib.lib,--base-file,mylib.exp,-Map,mylib.map,--export-all-symbols,--enable-auto-import,--whole-archive mylib_static.lib -Wl,--no-whole-archive -o mylib.dll
退会済みユーザー

退会済みユーザー

2022/02/18 21:49 編集

たしかにできます。 が、1つのコマンドで複数の静的ライブラリをdllに変換できますか? DXライブラリの場合,ほかのライブラリファイルに依存しているので、できるものもありますが 1つずつやるとundefinedの嵐です
jbpb0

2022/03/02 09:33

> 1つのコマンドで複数の静的ライブラリをdllに変換できますか? スタティックライブラリ名を(スペースを挟んで)羅列すればできると思います たとえば、三つのスタティックライブラリ「mylib_static.lib」「mylib_static2.lib」「mylib_static3.lib」から「mylib.dll」を作成する場合は、下記の通りです (長いけど一行です) g++ -O3 -shared -Wl,--out-implib,mylib.lib,--base-file,mylib.exp,-Map,mylib.map,--export-all-symbols,--enable-auto-import,--whole-archive mylib_static.lib mylib_static2.lib mylib_static3.lib -Wl,--no-whole-archive -o mylib.dll
guest

回答5

0

何かしら静的ライブラリ内の関数を使う関数をつくります

は、要らないと思います

たとえば、カレントディレクトリにある三つのスタティックライブラリ「mylib_static.lib」「mylib_static2.lib」「mylib_static3.lib」から「mylib.dll」を作成する場合は、下記を実行したらできるはずです
(当方のWin 10パソコンではできました)

cmd

1g++ -O3 -shared -Wl,--out-implib,mylib.lib,--base-file,mylib.exp,-Map,mylib.map,--export-all-symbols,--enable-auto-import,--whole-archive mylib_static.lib mylib_static2.lib mylib_static3.lib -Wl,--no-whole-archive -o mylib.dll

投稿2022/03/04 09:01

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず,何かしら静的ライブラリ内の関数を使う関数をつくります(ここでは,DxDll.cppとします)。

C++

1//DxDll.cpp 2#include "DxLib.h" 3 4//このように,静的ライブラリの関数を使うことで必ずライブラリが結合されるようになる 5bool Init() { return ::DxLib::DxLib_Init() && ::DxLib::SetDrawScreen(DX_SCREEN_BACK); }

bat

1rem build.bat 2 3rem DXライブラリのパス 4set DXLIB=DxLib 5g++ -shared -o DxDll.dll DxDll.cpp -L%DxLib% -lDxLib -lDxUseCLib -lDxDrawFunc -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath -lopusfile -lopus -lsilk_common -lcelt 6

すると,DxDll.dllができます。

投稿2022/02/19 02:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2022/02/19 07:11

それだと、DLL外部からDLL内の関数が利用できなくなりませんか?
退会済みユーザー

退会済みユーザー

2022/02/27 04:38

私の環境では,できました。 MSVCではできないかもしれません。
guest

0

手元に MinGW がないので動作確認できないのですけど、

  • *.def ファイルを書く
  • 静的リンクライブラリ *.a をバラして *.obj を手に入れる
  • 上記 *.def と *.obj から DLL を作る

で理論的には可能な気がします。

投稿2022/02/18 09:19

int32_t

総合スコア20884

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/02/18 10:38

> 静的リンクライブラリ *.a をバラして *.obj を手に入れる MinGWでできますかね? *.objはMinGWでは使われない拡張子の気がしますが...
guest

0

ベストアンサー

bat

1gcc -o <ファイル名>.dll -shared -Wl,--out-implib,<ファイル名>.a

でできました。

投稿2022/02/18 08:19

編集2022/02/18 12:17
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2022/02/18 08:39

これだと *.dll と *.a が空っぽになりませんか?
退会済みユーザー

退会済みユーザー

2022/02/18 08:40

そうですね。。。
guest

0

こちらが参考になりますか。
mingw ダイナミックリンクライブラリ
で検索してみてください。
[リンク内容]https://digirakuda.org/blog/2018/06/15/post-273/

投稿2022/02/18 08:05

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問