Re: FGCOMについて
toshi
投稿数: 1540
toshiです。
基本的に、プログラミングに関してあまり深い事は分からないのですが、今回のエラーについては予想がつきますのでお答えします。
まず私は、cygwin 環境と fgcom のソースは手元にあり、plib と OpenAl は手元にない状態です。
なので、plib や OpenAl のソースの構成や、コンパイルするとどういうファイルが生成されるのか未確認です。
# 特に OpenAl を cygwin でコンパイルするは大変そうな気がして敬遠しているのですが、うまくできましたか?
まず、cygwin の setup.exe を使って、「gcc: C compilier update helper」をインストールしているものと仮定します。
ついでに「subversion: A version control system」をインストールしておくことをお勧めします。
subversion を入れておくと、svn コマンドが使えるだけでなく、Makefile の中で
SVNDEF:=-D'SVN_REV="$(shell svnversion -n .)"'
みたいなことが出来るようになると思います。
次に、OpenAL や plib、fgcom のソースは、ホームディレクトリよりも下に入れておくことをお勧めします。
例えば、
~/src/openal
~/src/plib
~/src/fgcom
といった感じです。
同様に、コンパイルした openal と plib のライブラリ (.a) やインクルードファイル (.h) も
/usr/local/lib や /usr/include
のような cygwin のシステムディレクトリではなく、
~/src/openal/lib/libopenal.a
などのように配置することをお勧めします。
これは、自分でコンパイルしたファイルの管理をしやすくする (バージョンアップしたり、何かがおかしければすぐに削除できる) と共に、システムで提供しているファイルとの区別を容易にするためです。
※ 素性の確かなパッケージをインストールするなら話は別ですが。
それで、肝心のエラーですが、-mno-cygwin オプションをつけつつ /usr/include をインクルードディレクトリに指定して g++ を実行していることが原因のようです。
fgcom.cpp と同様に iostream をインクルードする以下のような簡単なソースコードを
$ g++ -mno-cygwin hello.cpp
としてコンパイルすると何も問題は起きませんが、
$ g++ -mno-cygwin -I/usr/include hello.cpp
とすると同じエラーを再現できます。
これは、-mno-cygwin が付いたときにどのディレクトリにある標準ライブラリを参照するべきであるかをシステム (cygwin) は正しく知っているはずなのに、-I/usr/include をつけてしまったためにそちらが優先され、結果誤ったファイルがインクルードされてしまっているものと思われます。
解決方法としてお勧めするのは、前述のように、fgcom が必要とする外部プログラムのファイルをシステムディレクトリ以外の場所に配置することです。
それに合わせて、fgcom の Makefile の中で、OPENAL_PREFIX や PLIB_PREFIX を openal と plib の .hファイルの場所にそれぞれ修正し、また LDFLAGS を使って plib と openal の ライブラリファイルの正しい場所をコンパイラに教えてあげるが良いのではないかと思います。
以上は、安定して動く fgcom を作成することをゴールとするなら、ほんのはじめの一歩であることを覚悟したほうが良いでしょう。
仮に fgcom がうまくコンパイルできるようになったとしても、従来版と何ら変わりない状況が予想されます。
その後、音が安定して聞こえるようにするためには、fgcom とその周辺のプログラムをいじくる必要性が生じることが考えられます。
基本的に、プログラミングに関してあまり深い事は分からないのですが、今回のエラーについては予想がつきますのでお答えします。
まず私は、cygwin 環境と fgcom のソースは手元にあり、plib と OpenAl は手元にない状態です。
なので、plib や OpenAl のソースの構成や、コンパイルするとどういうファイルが生成されるのか未確認です。
# 特に OpenAl を cygwin でコンパイルするは大変そうな気がして敬遠しているのですが、うまくできましたか?
まず、cygwin の setup.exe を使って、「gcc: C compilier update helper」をインストールしているものと仮定します。
ついでに「subversion: A version control system」をインストールしておくことをお勧めします。
subversion を入れておくと、svn コマンドが使えるだけでなく、Makefile の中で
SVNDEF:=-D'SVN_REV="$(shell svnversion -n .)"'
みたいなことが出来るようになると思います。
次に、OpenAL や plib、fgcom のソースは、ホームディレクトリよりも下に入れておくことをお勧めします。
例えば、
~/src/openal
~/src/plib
~/src/fgcom
といった感じです。
同様に、コンパイルした openal と plib のライブラリ (.a) やインクルードファイル (.h) も
/usr/local/lib や /usr/include
のような cygwin のシステムディレクトリではなく、
~/src/openal/lib/libopenal.a
などのように配置することをお勧めします。
これは、自分でコンパイルしたファイルの管理をしやすくする (バージョンアップしたり、何かがおかしければすぐに削除できる) と共に、システムで提供しているファイルとの区別を容易にするためです。
※ 素性の確かなパッケージをインストールするなら話は別ですが。
それで、肝心のエラーですが、-mno-cygwin オプションをつけつつ /usr/include をインクルードディレクトリに指定して g++ を実行していることが原因のようです。
fgcom.cpp と同様に iostream をインクルードする以下のような簡単なソースコードを
$ g++ -mno-cygwin hello.cpp
としてコンパイルすると何も問題は起きませんが、
$ g++ -mno-cygwin -I/usr/include hello.cpp
とすると同じエラーを再現できます。
//hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello world!\n" << endl;
return 0;
}
解決方法としてお勧めするのは、前述のように、fgcom が必要とする外部プログラムのファイルをシステムディレクトリ以外の場所に配置することです。
それに合わせて、fgcom の Makefile の中で、OPENAL_PREFIX や PLIB_PREFIX を openal と plib の .hファイルの場所にそれぞれ修正し、また LDFLAGS を使って plib と openal の ライブラリファイルの正しい場所をコンパイラに教えてあげるが良いのではないかと思います。
以上は、安定して動く fgcom を作成することをゴールとするなら、ほんのはじめの一歩であることを覚悟したほうが良いでしょう。
仮に fgcom がうまくコンパイルできるようになったとしても、従来版と何ら変わりない状況が予想されます。
その後、音が安定して聞こえるようにするためには、fgcom とその周辺のプログラムをいじくる必要性が生じることが考えられます。
投票数:33
平均点:5.15
投稿ツリー
-
FGCOMについて
(sambar, 2008-2-5 0:45)
-
Re: FGCOMについて
(Tat, 2008-2-5 1:56)
-
Re: FGCOMについて
(sambar, 2008-2-6 0:52)
-
Re: FGCOMについて
(Tat, 2008-2-6 21:58)
-
Re: FGCOMについて
(sambar, 2008-2-7 0:25)
-
Re: FGCOMについて
(Tat, 2008-2-7 1:29)
-
Re: FGCOMについて
(sambar, 2008-2-7 23:50)
-
Re: FGCOMについて
(Tat, 2008-2-10 0:08)
-
Re: FGCOMについて
(sambar, 2008-2-10 0:53)
-
Re: FGCOMについて
(takehiro, 2008-2-11 16:41)
- Re: FGCOMについて (sambar, 2008-2-12 0:40)
-
Re: FGCOMについて
(takehiro, 2008-2-11 16:41)
-
Re: FGCOMについて
(sambar, 2008-2-10 0:53)
-
Re: FGCOMについて
(Tat, 2008-2-10 0:08)
-
Re: FGCOMについて
(sambar, 2008-2-7 23:50)
-
Re: FGCOMについて
(Tat, 2008-2-7 1:29)
-
Re: FGCOMについて
(sambar, 2008-2-7 0:25)
-
Re: FGCOMについて
(Tat, 2008-2-6 21:58)
-
Re: FGCOMについて
(sambar, 2008-2-6 0:52)
-
Re: FGCOMについて
(toshi, 2008-5-4 22:16)
-
Re: FGCOMについて
(sambar, 2008-5-6 18:06)
-
Re: FGCOMについて
(toshi, 2008-5-6 23:12)
-
Re: FGCOMについて
(sambar, 2008-5-9 23:56)
-
Re: FGCOMについて
(toshi, 2008-5-10 19:11)
-
Re: FGCOMについて
(Tat, 2008-5-11 2:51)
-
Re: FGCOMについて
(sambar, 2008-5-11 23:20)
-
Re: FGCOMについて
(toshi, 2008-5-12 0:14)
-
Re: FGCOMについて
(Tat, 2008-5-12 10:46)
-
Re: FGCOMについて
(toshi, 2008-5-13 1:05)
-
Re: FGCOMについて
(sambar, 2008-5-14 0:55)
-
Re: FGCOMについて
(sambar, 2008-5-15 0:13)
-
Re: FGCOMについて
(toshi, 2008-5-17 3:11)
- Re: FGCOMについて (sambar, 2008-5-17 15:02)
-
Re: FGCOMについて
(toshi, 2008-5-17 3:11)
-
Re: FGCOMについて
(sambar, 2008-5-20 19:43)
-
Re: FGCOMについて
(toshi, 2008-5-21 2:50)
-
Re: FGCOMについて
(sambar, 2008-5-21 23:58)
-
Re: FGCOMについて
(toshi, 2008-5-22 0:37)
-
Re: FGCOMについて
(sambar, 2008-5-22 22:41)
-
Re: FGCOMについて
(sambar, 2008-5-24 17:36)
-
Re: FGCOMについて
(toshi, 2008-5-25 21:48)
-
Re: FGCOMについて
(toshi, 2008-6-25 1:39)
- Re: FGCOMについて (Tat, 2008-6-26 20:53)
-
Re: FGCOMについて
(toshi, 2008-6-25 1:39)
-
Re: FGCOMについて
(toshi, 2008-5-25 21:48)
-
Re: FGCOMについて
(sambar, 2008-5-24 17:36)
-
Re: FGCOMについて
(sambar, 2008-5-22 22:41)
-
Re: FGCOMについて
(toshi, 2008-5-22 0:37)
-
Re: FGCOMについて
(sambar, 2008-5-21 23:58)
-
Re: FGCOMについて
(toshi, 2008-5-21 2:50)
-
Re: FGCOMについて
(sambar, 2008-5-15 0:13)
-
Re: FGCOMについて
(sambar, 2008-5-14 0:55)
-
Re: FGCOMについて
(toshi, 2008-5-13 1:05)
-
Re: FGCOMについて
(Tat, 2008-5-12 10:46)
-
Re: FGCOMについて
(toshi, 2008-5-12 0:14)
-
Re: FGCOMについて
(sambar, 2008-5-11 23:20)
-
Re: FGCOMについて
(Tat, 2008-5-11 2:51)
-
Re: FGCOMについて
(toshi, 2008-5-10 19:11)
-
Re: FGCOMについて
(sambar, 2008-5-9 23:56)
-
Re: FGCOMについて
(toshi, 2008-5-6 23:12)
-
Re: FGCOMについて
(sambar, 2008-5-6 18:06)
- Re: FGCOMについて (takehiro, 2009-3-16 2:26)
- Re: FGCOMについて (toshi, 2009-3-17 1:11)
-
Re: FGCOMについて
(toshi, 2009-3-18 0:48)
- Re: FGCOMについて (sambar, 2009-3-18 19:46)
-
Re: FGCOMについて
(takehiro, 2009-3-18 22:58)
- Re: FGCOMについて (toshi, 2009-3-19 2:48)
- Re: FGCOMについて (takehiro, 2009-3-19 8:09)
- Re: FGCOMについて (takehiro, 2009-3-20 3:02)
- Re: FGCOMについて (takehiro, 2009-3-20 3:02)
- Re: FGCOMについて (toshi, 2009-3-21 1:08)
-
Re: FGCOMについて
(toshi, 2009-4-10 1:42)
-
Re: FGCOMについて
(takehiro, 2009-4-10 5:00)
- Re: FGCOMについて (toshi, 2009-4-14 0:37)
-
Re: FGCOMについて
(takehiro, 2009-4-10 5:00)
-
Re: FGCOMについて
(toshi, 2010-1-7 1:11)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 17:03)
-
Re: FGCOMについて
(takehiro, 2010-1-9 17:42)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 18:34)
-
Re: FGCOMについて
(takehiro, 2010-1-9 18:47)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 19:10)
-
Re: FGCOMについて
(takehiro, 2010-1-9 19:19)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 19:24)
-
Re: FGCOMについて
(takehiro, 2010-1-9 19:31)
-
Re: FGCOMについて
(toshi, 2010-1-9 20:20)
- Re: FGCOMについて (takehiro, 2010-1-9 21:20)
-
Re: FGCOMについて
(toshi, 2010-1-9 20:20)
-
Re: FGCOMについて
(takehiro, 2010-1-9 19:31)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 19:24)
-
Re: FGCOMについて
(takehiro, 2010-1-9 19:19)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 19:10)
-
Re: FGCOMについて
(takehiro, 2010-1-9 18:47)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 18:34)
-
Re: FGCOMについて
(takehiro, 2010-1-9 17:42)
- Re: FGCOMについて (Tat, 2010-1-14 0:32)
-
Re: FGCOMについて
(tkyllo5, 2010-1-9 17:03)
- Re: FGCOMについて (toshi, 2010-1-16 0:44)
- Re: FGCOMについて (toshi, 2010-1-18 1:11)
- Re: FGCOMについて (toshi, 2010-1-23 1:14)
-
Re: FGCOMについて
(takehiro, 2010-1-25 16:18)
-
Re: FGCOMについて
(Falcon, 2010-5-10 20:27)
- Re: FGCOMについて (toshi, 2010-5-11 0:18)
-
Re: FGCOMについて
(Falcon, 2010-5-10 20:27)
-
Re: FGCOMについて
(Falcon, 2010-5-12 20:04)
- Re: FGCOMについて (toshi, 2010-5-15 11:22)
-
Re: FGCOMについて
(Falcon, 2010-5-15 19:41)
-
Re: FGCOMについて
(toshi, 2010-5-16 10:14)
- Re: FGCOMについて (Zexe, 2010-5-16 22:17)
-
Re: FGCOMについて
(toshi, 2010-5-16 10:14)
-
Re: FGCOMについて
(Tat, 2008-2-5 1:56)