メイクファイルからdllを生成するには

このQ&Aのポイント
  • メイクファイルからdllを生成する方法について
  • dllとlib形式で用いるフリーのライブラリからdllを生成する手順
  • メイクファイルからdllを生成する際の注意点
回答を見る
  • ベストアンサー

メイクファイルからdllを生成するには

環境はWindowsXP SP3 VisualStudio2008です。 メイクファイルからdllを生成するには dllとlib形式で用いるフリーのライブラリがありまして、 Windows用バイナリとソースが提供されています。 Windows用バイナリの方がリリースが遅いので、 最新のソースの方でdllとlibを生成しようと考えました。 しかし、中身を見ると、 C言語用の「.c」「.h」ファイル以外に以下のファイルが含まれており、 これは何なのかと疑問を持ちました。 aclocal.m4 config.guess config.sub configure configure.in depcomp INSTALL install-sh ltmain.sh Makefile.am Makefile.in missing 調べたところメイクファイルというものだと分かったのですが、 これを用いてどうやってdllを生成すればよいのでしょうか。 参考として、このライブラリの提供サイトを記載しておきます。 http://libharu.org/wiki/Downloads

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc は既に LIBCMT.lib(malloc.obj) >で定義されています。 nmake -f script/Makefile.msvc でlibをビルドして、 そのまま nmake -f script/Makefile.msvc_dll を実施したのでしょうか? makeではコンパイル済みで変更のないソースはコンパイルしません。 で…Makefile.msvcでは-MTが、Makefile.msvc_dllでは/MDが指定されています。 # 前者は「マルチスレッド」、後者は「マルチスレッド DLL」の指定…ですな。 nmake -f script/Makefile.msvc clean で生成されたファイルを削除した上で、 nmake -f script/Makefile.msvc_dll を実施してみてはどうですか?

cider0318
質問者

お礼

ありがとうございます。 ご回答通りのの手順ミスだったようで、ようやくビルドして利用することができました。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

libHaru 2.2.xには、MSVC++のMakefileが入っていないようです。 libHaru 2.1.0をDLして展開。 libHaru 2.2.1もDLして展開して、ソースとヘッダなどを上書きコピーして、 「Visual Studio 2008 コマンド プロンプト」等でコマンドプロンプトを起動、 cd /d ~ でディレクトリ移動して… nmake -f script/Makefile.msvc でビルドが開始されました。 ただし、zlibが無いのでエラーになってしまいましたが……。 導入して最後まで確認…はしていませんのでとっかかりとして参考に…なるかなぁ。 割と無理矢理な方法ですので、あまりおすすめはできませんけどね。 # ソースファイルが追加/削除されていた場合にビルド対象になりませんし… cygwin/MSYSの方がよろしいかと思われます…。

cider0318
質問者

補足

ありがとうございます。非常に参考になりました。 zlib, libpngが必要だったのでヘッダファイルを追加し、 lib形式で生成することができました。 しかしdllの生成となるとまたもやエラーです。 nmake -f script/Makefile.msvc_dll というコマンドでビルドすればいいようですが、 MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc は既に LIBCMT.lib(malloc.obj) で定義されています。 という、VC++で開発中にたまに見るエラーが表示されました。 VisualStudioで言うプロジェクトの構成を変更すれば解決できそうですが、 メイクファイルの場合、どこでプロジェクトの設定を変えられるのでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

中は見ていませんが, ドキュメントに何か書かれていませんか?

cider0318
質問者

お礼

すみません、質問内容にあるINSTALLというのがそれでした、ありがとうございます。 インストール方法がこちらに載っていました。またまた参考までに。 http://libharu.org/wiki/Documentation/Install しかしちょっと進んだところでまた行き詰っています。 nmake -f script/Makefile.msvc というコマンドでできるそうですが、 この「script」というフォルダがなく、 VisualStuidoをインストールしたフォルダで直接Makefile.msvcを探しても 見つかりませんでした。よってこのまま実行するとエラーになります。 調べてみるとこのライブラリとは関係のないサイトに、 Makefile.inの中にある@VERSION@を設定し、 ファイル名をMakefile.msvcに変えてそれを使えるといった記述がありました。 しかし@VERSION@が何のことなのか分からず…。 とりあえずファイル名だけ変えてコマンドを実行すると、 fatal error U1035 : syntax error : expected ':' or '=' separator と表示され、失敗しました。 これはセミコロンが抜けてるらしいので、中を開いてみましたが、 これまた何がなんだか分からずに苦戦しています。 ここまででアドバイス等あればお願い致します。

関連するQ&A

  • makeファイルを生成してくれません

    最近Linuxをはじめたばかりの初心者です。 Fedora9上でHDD録画環境を構築しようとしておりまして、 その過程でXMLTVのインストールでつまづいてしまいました。 まず、XMLTVのインストールに必要なperlモジュールの組み込みを行っていた際に、Tk::TableMatrixというモジュールのインストールだけがなぜかうまくいきません。 試した方法としましては、 ・CPAN経由で # perl -MCPAN -e 'install Tk::TableMatrix' ・yum install ・cpan2rpm 最終的にはCPANからファイルをダウンロードして解凍して、 # perl Makefile.PL でやってみたのですが、 ### Note: 'Building Outside of Tk itself' Messages are Expected Here #### /usr/bin/perl is installed in /usr/lib/perl5/5.10.0/i386-linux-thread-multi okay PPM for perl5.010000 Test Compiling config/signedchar.c Test Compile/Run config/unsigned.c Test Compiling config/Ksprintf.c Test Compiling -DSPRINTF_RETURN_CHAR config/Ksprintf.c Test Compiling config/tod.c Test Compiling -DTIMEOFDAY_TZ config/tod.c Test Compiling -DTIMEOFDAY_NO_TZ config/tod.c Test Compiling -DTIMEOFDAY_DOTS config/tod.c Problem gettimeofday() Using -L/usr/lib to find /usr/lib/libX11.so.6.2.0 Cannot find X include files via /usr/include Cannot find X include files anywhere at ./myConfig line 315. Compilation failed in require at Makefile.PL line 19. BEGIN failed--compilation aborted at Makefile.PL line 23. と表示され、makeファイルが生成されないようです。 とりあえず、いろいろ調べたところXMLTV側では、 Tk::TableMatrix は tv_check 実行時に必要とのことらしいので、 tc_checkはインストールせずにXMLTVのインストールを続行したところ、 Checking if your kit is complete... Looks good bad makefile line: ' $(NOECHO) $(NOOP)' at Makefile.PL line 892. と、なり、やはりmakeファイルが作られません。。。 ここまでの行程では特にこのようなことはなかったのですが、 なにかまずいことをしてしまったのでしょうか? 上記の現象について、どなたかアドバイスいただけないでしょうか。 長文失礼しました。 よろしくお願いいたします。

  • libgdのmake でエラー

    perl で GD を使うために libgd をインストールしようとしているのですが、make で次のようなエラーがでて先に進めません。どうすればいいでしょうか? cd . && /bin/sh /var/morita/linux_apps/gd-2.0.35/config/missing --run aclocal-1.9 -I config aclocal:configure.ac:64: warning: macro `AM_ICONV' not found in library cd . && /bin/sh /var/morita/linux_apps/gd-2.0.35/config/missing --run automake-1.9 --foreign Makefile.am:18: Libtool library used but `LIBTOOL' is undefined Makefile.am:18: Makefile.am:18: The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL' Makefile.am:18: to `configure.ac' and run `aclocal' and `autoconf' again. make: *** [Makefile.in] Error 1 libgdのバージョンはgd-2.0.35です。 configureのスイッチは ./configure --bindir=/usr/local/bin/gd-2.0.35 です。 OSはlinux(CentOS 4.4)です

  • Windowsのmakeについて特にpython

    ソースプログラムを実行するための環境を作るmakeについてお尋ねします。Linuxなどでは、OSをインストールした時点で1つ有効なmakeがg++, gcc等で使用することを目指して利用できるようになっていると思います。アプリのインストールでさえmakeですね(./configure, make cleanとかの定型処理)。Windowsだとmakeを提供する元がいっぱいあってプロンプトでwhere make とすると4つぐらい出てきます。そこで質問なのですが、makeという操作は提供元によって全然文法その他の仕様が違うものなのでしょうか。つまり、一般性が高いmakefileというものあるのか?という質問にもなりますが。コマンドプロンプトでmakeをやるとpathの最初に出てくるmakeが呼ばれるようです。Windowsのmakeは一般論では何も言えないでしょうか。大昔,マイクロソフトはnmakeで名前を変えて唯一のものとして確定していたようですが。 さらにpython3.6についてお尋ねしたいと思います。あるプログラムのソースをダウンロードして、広げてみるとソースファイル軍とmakefileがあり、makefileの冒頭に、 ## The present Makefile is a pure configuration file, in which ## you can select compilation options. Compilation dependencies ## are managed automatically through the Python library SConstruct. 上記はmakeの一般論のあとPythonでもライブラリがあれば使えるという風に読める記述があります。そもそもPythonってインタプリターとかソースにpythonコマンドで利用するということであり、実行ファイルは作らないものだと思っていたのでどういうことだろうと思うのですが。makefileをmakeで呼び出して利用するにしてもどのmake.exeでもいいってことではないと思うのですが。pythonで使用するmakefileということですが。 よろしくお願いします。

  • makeしてinstall

    ソフトウェアをインストールするとき、 ./configure → make → make install のような手順が書かれているのを良く見るのですが、すんなりといくときもあれば、「ターゲットが指定されておらず, makefile も見つかりません」と表示されて止まってしまうこともあります。 makeしたときに出る、「ターゲットが指定されていない」とはどういう意味なのでしょうか? 今までWindowsしか触ったことが無いので、Linuxがソフトウェアをインストールするときどういう流れになっているのかわかりません。 また、どこかに「ソースからmakeしてinstallする時の、一般的な手順と、 エラーメッセージの見方」のようなものはないでしょうか?

  • LinuxC++ファイルWindowsでのmake

    GPLで、makefile,configure,configure.inなどのある linux用のC++ソースファイル(一部perlあり)を minGWでコンパイルしようとすると perlの方でエラーが出ます。 lang,LC_ALLなどがおかしいと出てきますが どうしたらいいのでしょうか。 Visual C++ Express Editionでは、 nmakeを使おうとすると区切り記号が ないというエラーがでます。 強引にGUI(IDE)上でコンパイルしよう とすると、includeファイルがないと いうエラーが出ます。

  • libファイル無しでかつLoadLibraryを使わずにロードする方法

    お世話になります。 現在eMbedded VC でソフト開発を行っています。 今Libファイルが無く、ヘッダファイルとdll本体 だけが有るライブラリがあります。 このライブラリのソースはありません。 このライブラリを使用したい場合、LoadLibraryで動的ロードを行えばよいのですが、 どうしても静的に(Libファイルを用いるときのように)ロードを行いたい場合はどのようにすればよいでしょうか? 例えば ・ヘッダとdllからlibファイルを逆生成して使用する方法 やツールについて 等等・・ (原理的に無理な場合はそのようなご回答もお待ちしております。) お忙しい中ですが、皆様宜しくお願いいたします。

  • PHP-4.3.1でmake出来ない

    RedHat8.0 apache(httpd-2.0.45)の環境に PHP-4.3.1をインストールしようとしたのですが、 下記のconfigureでmake出来ません。 ./configure --with-apxs=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbregex --enable-zend-multibyte どなたか分かる方がいらっしゃいましたら 教えてください。 ※ちなみに、オプションを付けずにconfigureを 行うとmakeできます。 ※上記のオプションを付けると、Makefile.fragmentsと Makefile.objectsのみ作成されます。

  • Arduinoでのライブラリファイル生成方法

    Arduinoで.aファイルまたは.dllファイルのライブラリを生成&使用したいのですが、 Arduino IDEではライブラリファイルの生成が出来ないように思われます。 Arduinoで使用可能な.a / .dllファイルの生成方法を教えて頂けると助かります !! (Atmel Studioを用いることで可能なのでしょうか?) またArduino IDEにおいて、ライブラリ使用方法も合わせてご教授願いたいです。

  • make.sh実行時のエラー対応方法に困っています。

    皆さん、こんにちわ。 大学の研究室の勧めで、 少しづつLinuxの事を勉強しだした者です。 今回は、先生に「インストールしておいてね!」と頼まれた、 シミュレーションソフトのコンパイルに うまくいかず悩んでおりましたが、 研究室の先生がしばらく出張で連絡が取れないのと、 周囲に質問できる人がおりませんで、 一生懸命に取り組んだのですが、 突破口が見つからず、 困り果てて質問させていただきました。 先生には2つのファイルを渡されました。 1つは、シミュレータソフトのソース(C++)でして、 もう一つは、 たぶんソースを「make」するためのソフトで make.shという名前のものです。 先生には簡単な手順書を渡されていましたが、 本当に簡単なものでして、 以下にあるような、たった2行のものでした。 (1)ソースをFTPやSCPでサーバにあげて解凍(tar.gz)する。 (2)もう1つのファイル「make.sh」を実行する。 上記(1)はさすがに成功しました。 次に(2)に移りました。 すると、まりにも長いテキストなので一部割愛しますが、 以下のエラー文がでてきて成功しませんでした。 # sh make.sh compile ctl configure.ac:4: error: Autoconf version 2.61 or higher is required configure.ac:4: the top level autom4te: /usr/bin/m4 failed with exit status: 63 make.sh: line 8: ./configure: No such file or directory make: *** No targets specified and no makefile found. Stop. compile csx configure.ac:4: error: Autoconf version 2.61 or higher is required configure.ac:4: the top level autom4te: /usr/bin/m4 failed with exit status: 63 make.sh: line 8: ./configure: No such file or directory make: *** No targets specified and no makefile found. Stop. compile mdt checking for boostlib >= 1.33.1... yes checking whether the Boost::Signals library is available... yes checking for exit in -lboost_signals-gcc41-mt-1_36... yes checking for ctl... no configure: error: could not found libctl. if you have compiled libctl (still not installed) give a PATH to --with-ctl option. make: *** No targets specified and no makefile found. Stop. compile ndt compile ndt checking for boostlib >= 1.33.1... yes checking for ctl... no configure: error: could not found libctl. if you have compiled libctl (still not installed) give a PATH to --with-ctl option. make: *** No targets specified and no makefile found. Stop. compile cstp checking for boostlib >= 1.33.1... yes checking for ctl... no configure: error: could not found libctl. if you have compiled libctl (still not installed) give a PATH to --with-ctl option. make: *** No targets specified and no makefile found. Stop. compile csrpc checking for boostlib >= 1.33.1... yes checking for ctl... no configure: error: could not found libctl. if you have compiled libctl (still not installed) give a PATH to --with-ctl option. make: *** No targets specified and no makefile found. Stop. compile kbr checking for SHA1 in -lcrypto... no configure: error: could not found libcrypto. make: *** No targets specified and no makefile found. Stop. compile ovsim checking boost/assert.hpp usability... no checking boost/assert.hpp presence... no checking for boost/assert.hpp... no configure: error: Can't find "boost c++ library". Please install. make: *** No targets specified and no makefile found. Stop. make.sh: line 24: qmake-qt4: command not found make: *** No targets specified and no makefile found. Stop. どうすれば、「make.sh」に成功するのか?と、 とりあえず、エラーのでている内容で、 不足しているものについては、 インストールしてみよう!と思い、 # yum install boost # yum install qt4 これらにより、例えばboostやqt4に関するエラーなどについては、 解消されるのだと思いつつトライしてみたのですが、 yumインストールに成功するも、 全くエラー内容に改善は無く、 エラーの対処が分からなくなってしまいました状態です。 初心者の質問ですので、 回答するのは不足点などもあるかもしれませんが、 どなたか、アドバイスいただけると、 大変ありがたいです。 OSはCentOS5系になっています。 どうぞ宜しくお願い致します。

  • cloopのコンパイル

    Debianのlennyを利用してます。 cloopをコンパイルするため、makeを実行すると以下のようにエラーになってしまいます ーーーーーーーーーーーーーーーーーーーーーー cd advancecomp-1.15 && ./configure /bin/sh: line 0: cd: advancecomp-1.15: そのようなファイルやディレクトリはありません make: *** [advancecomp-1.15/config.status] エラー 1 ーーーーーーーーーーーーーーーーーーーーーー Makefileの読み方もよくわからないようなレベルなので、どう対処したらいいのかわかりません。 何かアドバイスをお願いします。 Debianにadvancecompパッケージはインストールしてあります。

専門家に質問してみよう