- ベストアンサー
Cygwinでのライブラリの使い方
前回の質問に対する回答により、探していたライブラリ(laconia.h)を発見することが出来ましたが、どうやってもその使い方がわかりません。 どうもUNIX用のMakefileをCygwin用にいじらなければならないようなのですが、具体的にどのようにプログラムを書き換え、どこにおけばいいのでしょうか? できれば他のライブラリにも共通する方法を教えてください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
cygwin と前回の質問の回答に書かれているページからファイルをダウンロードしてみました。 このファイルで良いのですよね。 $ ls -lg libsrc.tar.gz -rwxrwxrwx 1 なし 12716 Sep 12 20:26 libsrc.tar.gz これを展開して、 cd libsrc/liblac make -f Makefile.linux で問題なく、liblaconia.a が構築できましたが…。試してみてください。 当方の環境は、以下のとおりです。 $ uname -a CYGWIN_NT-5.1 xxxxxxxx 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin $ gcc --version gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) $ make --version GNU Make 3.80 > Makeができたとして、それをどこに置いたらよいのかがわからないのです。 どこに置いても、コマンド引数にパス付で指定すれば、OK です。例えば、 gcc -o 実行ファイル名 コンパイルオプション ソースファイル名 他のライブラリ パス/liblaconia.a 他のライブラリ という具合です。/usr/lib や /lib に置けば、パス/liblaconia.a の代わりに -llaconia と書くことができます(liblaconia.a のあるディレクトリを環境変数 LD_LIBRARY_PATH に追加する方法もあるが、cygwin 環境で有効かは未確認)。 liblaconia.a (または -llaconia)をコマンド引数のどの位置に置くかは注意を要します。基本的には、 liblaconia.a の関数を呼び出しているソース、ライブラリの後ろ liblaconia.a が呼び出しているライブラリの前 に位置させることになります。
その他の回答 (2)
- oldroot2005
- ベストアンサー率66% (68/103)
> ただ、liblaconia.aのMake方法と、Makeができたとして、それをどこに置いたらよいのかがわからないのです。 うーむ、makefile の書き方次第なので、一般的に「こうすればよい」というふうなアドバイスは難しいです。 良くあるのは、「make」でターゲットをビルドし、root になって、「make install」で適切なディレクトリに移動する、というパターンですが…。ダウンロードしたファイル群の中に、README とか INSTALL とか、それらしい名前のテキストファイルは含まれていませんか? もしあれば、その中に make の仕方が書いてあるかもしれません。 > 「Is a directory. Stop.」 ファイルに対して行う操作をディレクトリに対して行ってしまったことを示しています。 > Nothing to be done for 'all' すでにターゲット(liblaconia.a のこと)は出来上がっているので、何もすることが無いことを示しています。 お近くに、makefile の書き方と cygwin に詳しい方はいらっしゃいませんか? これ以上のアドバイスは、実際のモノにあたってみないと、ちょっと無理なのではないかと思います(ネット上のやりとりでは苦しい)。
- oldroot2005
- ベストアンサー率66% (68/103)
「前回の質問」というのは、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1617366 ですか? 「使い方が分からない」というのはどういう意味でしょう? liblaconia.a は色々な関数を提供していると思いますが、それら関数の使い方が分からないのですか? それならば、liblaconia.a にマニュアルが付属していない限り、分からないと思います(他に情報源が見つけられれば別ですが)。 それとも、入手したソースコードから liblaconia.a を make できない、ということですか? それならば、make したときに出力されるメッセージを補足してください。 なお、「ライブラリ(laconia.h)」と書かれていますが、拡張子 .h はヘッダファイルであり、ライブラリ・アーカイブ(拡張子 .a)ではありません。前回の質問からするとお分かりのようではありますが…。
補足
質問の内容が具体性に欠けたものであり、申し訳ありませんでした。 「前回の質問」はhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1617366で間違いありません。また、ご指摘の通り、laconia.hはヘッダファイルでした。 最近ネットで#include "laconia.h"を含むOpenGLのプログラムを手に入れたためコンパイルしようとしたのですが、ライブラリがなくてできませんでした。前回の回答者さんのおかげでライブラリ自体は探せたのですが、Makefileのところでつまずいてしまいました。 laconia.hをusr/includeフォルダの中に入れたところ、コンパイル結果に変化があった(失敗でしたが・・・)ためヘッダファイルはそこに入れればよいのだと思います。 ただ、liblaconia.aのMake方法と、Makeができたとして、それをどこに置いたらよいのかがわからないのです。 一応Makefile内をいじってinclude{ROOT}以下を書き換えたり、「make -f Makefile.linux」をしたりしてみたのですが、「Is a directory. Stop.」や「Nothing to be done for 'all'」などの表示が出るばかりでした。また、一回だけliblaconia.aの作成に成功したのですが、恥ずかしながらどこをどういじり、どうコンパイルしたのかも忘れてしまいました…。
お礼
重ね重ね、ありがとうございます。/usrにできたliblaconia.aを置き、ソース名のあとで-llaconiaと表記してコンパイルしましたところ、ついに正常にプログラムが動きました。 これを使って次のプログラムを作って行きたいと思います。本当にありがとうございました。