[opensuse-ja] 64bit SUSEとコンパイル
xeon-koyamaです。 OpenSUSE の 64bit版で、64bit対応したapache2 をソースからコンパイルしたいのですが、 ご存じの方がいらっしゃいましたら、ご返答宜しくお願いいたします。 やったこと OpenSUSEの64bitをインストール。開発パッケージを選択して入れた。 apacheのconfigure を行う前に、 export CFLAGS="-O2 -m64" としてから、 ./configure した コンパイルは無事通り、インストールも出来た。 file /usr/local/apache2/bin/httpd した所、 ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped となっており、64bit になったような気がするが、以下の理由から確信が持てない。 64bitに対応するために、man gcc で オプションを調べた所 i386 and x86-64 Options -mpc32 -mpc64 というオプションと -m32 -m64 が存在する。 webでは、CC='gcc -m64' を見かけるので、-m64としたが、 -mpc64 にしなければならなかったのだろうか? また、export CFLAGS="-O2 -m64" せずに コンパイルした場合は、32bitで作成されてしまうのだろうか? 以上 ご存じの方がいらっしゃいましたら、ご返答宜しくお願いいたします。 -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
今井です。 /usr/src/packagesにopenSUSEで用意しているSRPM を展開してビルドしてしまうのが一番簡単な様な気がしますが....。 (自前ビルドのがどうしても欲しい場合) 内部でconfigureとかしてるのでSPECファイル見れば どういうオプションがコンパイルの際に必要なのかも 分かりますし。 RPMによるパッケージ管理ツールが動いている以上、 ソースからコンパイルしたものを入れると依存関係で苦労 する事になります。 パッケージ管理ツール(YaST or zypper)からはapacheは インストールされていないと判断して(されて)しまう以上、 場合によってはapacheが使用するライブラリとか 依存関係にひっかからずにばっさり消去なんて事にも なりかねません。 そうすると ソースからコンパイルして入れたアプリが動いていたのに ある日突然なぜか動かない(動かなくなった).... ということになることも。 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 今井 優 mail: mforce4@gmail.com (maimai@coral.ocn.ne.jp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
松本です。 テスト、検証、勉強のため…ということではなく、もし実環境で使うことを想定 しているようでしたら、別ポストで今井さんがおっしゃっているように RPM 管 理していった方が無難だと私も思いますが…。吊るしの Apache2 だと使いたい バージョンがないとか、いろいろオプションを変えたコンパイルをしてみてベン チマークとかとってみたいとかいうことでしょうかね。 で、以下、私も gcc について詳しいわけではないんで、あくまで man を見る限 り、ということで気になったところを。 mlus さんは書きました:
64bitに対応するために、man gcc で オプションを調べた所 i386 and x86-64 Options -mpc32 -mpc64 というオプションと -m32 -m64 が存在する。
どこまで man を読まれてますでしょうか? -mpc32 -mpc64 -mpc80 Set 80387 floating-point precision to 32, 64 or 80 bits. When -mpc32 is specified, the significands of results of floating-point operations are rounded to 24 bits (single precision); -mpc64 rounds the significands of results of floating-point operations to 53 bits (double precision) and -mpc80 rounds the significands of results of floating-point operations to 64 bits (extended double precision), which is the default. When this option is used, floating-point operations in higher precisions are not available to the programmer without setting the FPU control word explicitly. Setting the rounding of floating-point operations to less than the default 80 bits can speed some programs by 2% or more. Note that some mathematical libraries assume that extended precision (80 bit) floating-point operations are enabled by default; routines in such libraries could suffer significant loss of accuracy, typically through so-called "catastrophic cancellation", when this option is used to set the precision to less than extended precision. [snip] -m32 -m64 Generate code for a 32-bit or 64-bit environment. The 32-bit environment sets int, long and pointer to 32 bits and generates code that runs on any i386 system. The 64-bit environment sets int to 32 bits and long and pointer to 64 bits and generates code for AMD's x86-64 architecture. For darwin only the -m64 option turns off the -fno-pic and -mdynamic-no-pic options. …ということで、そもそも意味が違っていますよね。単純に 64 bit のバイナリ が作りたい場合は -m64 でいいのではないでしょうか。-mpc64 オプションは 「オペレーションのフローティングポイントの結果の仮数部を 53 bit (倍精度) にする」 # 全然意味が分かってないんで、単なる棒訳です。(^ ^;) # 詳しい方、フォローお願いします。 # てか、詳しい人がいても、メーリングリストへのリプライだけでは # 説明しきれないんじゃないかという気はしますね(笑)。 …ためのオプションだと書いてありますね。 -- _/_/ Satoru Matsumoto - openSUSE Member - Japan _/_/ _/_/ Marketing/Weekly News/openFATE Screening Team _/_/ _/_/ mail: helios_reds_at_gmx.net / irc: HeliosReds _/_/ _/_/ http://blog.geeko.jp/author/heliosreds _/_/ -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
今井さん、松本さん、風穴さん ご返答ありがとうございます。
/usr/src/packagesにopenSUSEで用意しているSRPM を展開してビルドしてしまうのが一番簡単な様な気がしますが..
今井さんがおっしゃるように、これを試してみます。 また、松本さんがおっしゃるように、man の読み込みが足りなかったですね。 反省です・・・。 パッケージ管理についてですが、SUSE9以来ずーっと、ソースコンパイルでやってきている関係から、パッケージを使う事は考えていないのです。 (cgiすら使わないので一度も依存関係で困った事はないのです。) 風穴さん #「64bit」とおっしゃっているのが、x86-64(Intel64やAMD64)のことだという #大前提ですが。 はい、そうです。おっしゃるようにCPUの明記がなければ判断できませんよね。 Itaniumを購入する資金がないので、Xeon E5502の x86_64 です。
また、export CFLAGS="-O2 -m64" せずに コンパイルした場合は、32bitで作成されてしまうのだろうか?
一般的にはそういう理解で構わないと思います。 この質問はつまり「オプションを指定しない場合のgccのデフォルト動作は?」ということですが、 厳密に言えば、それは環境に依存するということになると思うので。 #64bit版openSUSEにおけるgccの設定やソースを調べればいいのですが、すみません、そこまでしてません。(^_^;)
gccは詳しくないので、これからボチボチ調べて行きたいと思います。 ご丁寧な解説ありがとうございます。 -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
今井です。 風穴さんのメイル自体が流れてきてないのですが..... MLのアーカイブにもありませんし、ひょっとしてkoyamaさん へのDMになっちゃってるとか?でしょうか。 それはそうと ソースからコンパイルするにしてもSPECファイルを借用 してRPMパッケージ作っちゃえば良いのではないかと。 (私もSPECファイルだけ借用してソースファイルを 差し替えてからパッケージ作ったりとかしてます) もしくは100%OKという訳じゃないですがcheckinstall 使っちゃうとか。 とにかくRPMのデータベースに入ってしまえば、依存関係 とかきちっと管理されるので怖いもの無し?ではないでしょうか。 2009年10月2日13:15 mlus <mlus@39596.com>:
今井さん、松本さん、風穴さん ご返答ありがとうございます。
/usr/src/packagesにopenSUSEで用意しているSRPM を展開してビルドしてしまうのが一番簡単な様な気がしますが..
今井さんがおっしゃるように、これを試してみます。 また、松本さんがおっしゃるように、man の読み込みが足りなかったですね。 反省です・・・。
パッケージ管理についてですが、SUSE9以来ずーっと、ソースコンパイルでやってきている関係から、パッケージを使う事は考えていないのです。 (cgiすら使わないので一度も依存関係で困った事はないのです。)
風穴さん
#「64bit」とおっしゃっているのが、x86-64(Intel64やAMD64)のことだという #大前提ですが。
はい、そうです。おっしゃるようにCPUの明記がなければ判断できませんよね。 Itaniumを購入する資金がないので、Xeon E5502の x86_64 です。
また、export CFLAGS="-O2 -m64" せずに コンパイルした場合は、32bitで作成されてしまうのだろうか?
一般的にはそういう理解で構わないと思います。 この質問はつまり「オプションを指定しない場合のgccのデフォルト動作は?」ということですが、 厳密に言えば、それは環境に依存するということになると思うので。 #64bit版openSUSEにおけるgccの設定やソースを調べればいいのですが、すみません、そこまでしてません。(^_^;)
gccは詳しくないので、これからボチボチ調べて行きたいと思います。 ご丁寧な解説ありがとうございます。 -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 今井 優 mail: mforce4@gmail.com (maimai@coral.ocn.ne.jp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
お疲れさまです。風穴です。 今井さん、ご指摘ありがとうございます。その通り、xeon-koyamaさん宛にreplyしてしまって いました。失礼しました。(^_^;) ということで、以下、「Fri, Oct 2, 2009 at 4:46 AM」(JST)にMLに投げたものです。 参考までに。 -------------------------------------------------------------------- こんにちは、風穴です。 2009/10/1 mlus <mlus@39596.com>: (snip)
file /usr/local/apache2/bin/httpd した所、
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
となっており、64bit になったような気がするが、以下の理由から確信が持てない。 (snip)
fileコマンドが「ELF 64-bit LSB executable」と言っているので、64bitバイナリ(x86-64用バイナリ) は生成できていると思います。 #「64bit」とおっしゃっているのが、x86-64(Intel64やAMD64)のことだという #大前提ですが。 (snip)
webでは、CC='gcc -m64' を見かけるので、-m64としたが、 -mpc64 にしなければならなかったのだろうか?
-mpc64は、浮動小数点演算のモード(演算精度)を明示的に指定するためのオプションですので、 x86-64バイナリを生成するという目的においては関係ないですね。
また、export CFLAGS="-O2 -m64" せずに コンパイルした場合は、32bitで作成されてしまうのだろうか?
一般的にはそういう理解で構わないと思います。 この質問はつまり「オプションを指定しない場合のgccのデフォルト動作は?」ということですが、 厳密に言えば、それは環境に依存するということになると思うので。 #64bit版openSUSEにおけるgccの設定やソースを調べればいいのですが、すみません、そこまでしてません。(^_^;) 一般に64bitというと、CPUの64bitモード(x86系では特にx86-64)のこととして 世間では了解されていますが、厳密に言えば、こういうbit幅の話はいろんなところで出てくる ので(-mpc64:浮動小数点演算を倍精度にするとか)、何の話かを明確にしておかないと 混乱してしまいかねません。 今回の質問のような場合は、「32bit」「64bit」というのはあくまで便宜的な表現であって、 実際には「Intel64(あるいはAMD64)という命令アーキテクチャに対応したバイナリを生成する」 ということですね。 #その意味では、こういう話をする場合は、CPUが何なのかを明記したほうが良いと思います。 -- Ko Kazaana -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
今井です。 2009年10月2日22:08 Ko Kazaana@ml <ml@windhole.net>:
お疲れさまです。風穴です。 今井さん、ご指摘ありがとうございます。その通り、xeon-koyamaさん宛にreplyしてしまって いました。失礼しました。(^_^;)
このML特有で、うっかりしてると.....というものなので 誰でもやってしまう可能性高いので気にしない事です。
ということで、以下、「Fri, Oct 2, 2009 at 4:46 AM」(JST)にMLに投げたものです。 参考までに。 -------------------------------------------------------------------- こんにちは、風穴です。
#64bit版openSUSEにおけるgccの設定やソースを調べればいいのですが、すみません、そこまでしてません。(^_^;)
一般に64bitというと、CPUの64bitモード(x86系では特にx86-64)のこととして 世間では了解されていますが、厳密に言えば、こういうbit幅の話はいろんなところで出てくる ので(-mpc64:浮動小数点演算を倍精度にするとか)、何の話かを明確にしておかないと 混乱してしまいかねません。
今回の質問のような場合は、「32bit」「64bit」というのはあくまで便宜的な表現であって、 実際には「Intel64(あるいはAMD64)という命令アーキテクチャに対応したバイナリを生成する」
嫌らしい?のはIntel64とAMD64では一部互換性の無いところがあるってのと、 Atomだと64bitOS利用可能だが物理アドレスが32bitなのであんまり有り難味 が無いってとこでしょうか。 (まあAMD製のCPUでも今のところ物理アドレス40bitなのでドングリの背比べ みたいなところもありますが) VTも基本的に無い?のでVirtualBox等もアレですし.....。 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 今井 優 mail: mforce4@gmail.com (maimai@coral.ocn.ne.jp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-ja+help@opensuse.org
participants (4)
-
Ko Kazaana@ml
-
Masaru Imai
-
mlus
-
Satoru Matsumoto