MacOS XをUnixとして使ってる人の為のスレ その13
at MAC
683:名称未設定
08/05/04 14:06:31 ad2LRzsZ0
初心者質問用スレから誘導されてきました。
Mac mini(1.83GHz) / Mac OS X 10.5.2 で
PostgreSQL 8.3.0をソースからビルドしても
MacPortsからインストール(postgresql83 & postgresql83-server)しても
i386 なバイナリ(実行体&ダイナミックライブラリ)ができあがりますが、
標準インストールの Apache(/usr/sbin/httpd)は 64bit(x86_64)で動くので
DSOモジュールから libpq をダイナミックリンクすることができません。
Apacheを 32bit で動かすか、PostgreSQL(のライブラリ)を 64bitの
ユニバーサルバイナリにする必要があると思うのですが
どうすればよいでしょう?(Apacheを再インスコでi386化?)
具体的には mod_python(3.3.1) + PyGreSQL(3.8.1) の組み合わせで
/var/log/system.log に以下のエラーが出ます。
ImportError: dlopen(/Library/Python/2.5/site-packages/_pg.so, 2): Symbol not found: _PQclear
Referenced from: /Library/Python/2.5/site-packages/_pg.so
Expected in: dynamic lookup
ちなみに mod_python は
URLリンク(www.farbflash.de)
PyGreSQL は
URLリンク(bytes.com)
を参考に -arch x86_64 を含むユニバーサルバイナリにしています。
事情を見るにPython固有ではないと思うんですが‥‥
684:名称未設定
08/05/04 14:25:24 Rj6CFj+s0
スレ違い
以下へどうぞ
Mac OS X初心者質問用スレ 24.6
スレリンク(mac板)
685:名称未設定
08/05/04 17:48:31 tmtYRo+Y0
>>684
そこから,ここを紹介されたみたいだけど?
>>683
$ CFLAGS="-arch x86_64" ./configure
みたいな方法で出来ないんだっけ?
どういう手順でbuildしてる?
686:名称未設定
08/05/04 19:03:50 Bo9oWIsp0
>>685
ARCHFLAGS="-arch x86_64" かな。
687:名称未設定
08/05/04 19:42:13 ad2LRzsZ0
>>685-686
ありがとうございます。CFLAGS,ARCHFLAGS 試してみます。
> どういう手順でbuildしてる?
ソースからのビルドは、make -v したら GNU Make だったので
そのまま ./configure ; make ; sudo make install。
MacPortsの方はソースビルドしたものを sudo make uninstall して
sudo rm -rf /usr/local/pgsql してから
sudo port install postgresql83
sudo port install postgresql83-server
です。
688:名称未設定
08/05/04 20:48:48 ad2LRzsZ0
ARCHFLAGS は残念な結果になりましたが、
CFLAGS で x86_64 な PostgreSQL を作ることができました。
setenv ARCHFLAGS "-arch x86_64"
env | grep FLAGS
→ ARCHFLAGS=-arch x86_64
./configure ; make
file src/backend/postgres
→ src/backend/postgres: Mach-O executable i386
file src/interfaces/libpq/libpq.dylib
→ src/interfaces/libpq/libpq.dylib: Mach-O dynamically linked shared library i386
setenv CFLAGS "-arch x86_64"
env | grep FLAGS
→ CFLAGS=-arch x86_64
./configure ; make
file src/backend/postgres
→ src/backend/postgres: Mach-O 64-bit executable x86_64
file src/interfaces/libpq/libpq.dylib
→ src/interfaces/libpq/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
689:名称未設定
08/05/04 20:50:15 ad2LRzsZ0
しかし、
setenv CFLAGS "-arch i386 -arch x86_64"
とすると src/backend/access/common/heaptuple.c のコンパイルで
エラーが出てしまいます。(それ以降試してませんが、全体にそんな感じかも)
PostgreSQL を Apache経由で使う分には x86_64 onlyで問題ないと思うのですが、
コマンドラインの Pythonからも使いたいのでちょっと都合が悪くて‥‥
結局、Leopard標準の httpd と python が異なる構成になってるのが
大元の原因なんですかね。
file `whereis httpd`
/usr/sbin/httpd: Mach-O universal binary with 4 architectures
/usr/sbin/httpd (for architecture ppc7400): Mach-O executable ppc
/usr/sbin/httpd (for architecture ppc64): Mach-O 64-bit executable ppc64
/usr/sbin/httpd (for architecture i386): Mach-O executable i386
/usr/sbin/httpd (for architecture x86_64): Mach-O 64-bit executable x86_64
file `whereis python`
/usr/bin/python: Mach-O universal binary with 2 architectures
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc
/usr/bin/python (for architecture i386): Mach-O executable i386
690:名称未設定
08/05/04 20:51:14 ad2LRzsZ0
pythonを x86_64 にするのは不安がある(何かトラブルありそう)ので、
Apacheを i386 で自前でビルドして使うことにします。
(運用で使うのでなく開発中スクリプトのローカルテスト等が中心なので
パフォーマンスは気にしない)
でも、PostgreSQL にしろ Apache にしろ、CFLAGSを指定せずビルドすると
i386バイナリになっちゃうのは、まだ x86_64 になりきれてないんですかねー?
Mac OS X初心者でそこらへんの事情がよくわかっていないですがm(_ _)m
ともあれ、諦める形ながら結論に辿り着けました。
ご助言くださったみなさんありがとうございました。
691:名称未設定
08/05/05 00:45:24 YA9aa5EG0
OSXのgccがそういう設定でビルドされてるだけの話。
つーか、CFLAGSを置き換えるよりはCC,CXXを置き換えた方が安全だと思うが。
CC="gcc -arch x86_64" CXX="g++ -arch x86_64" ./configure
692:名称未設定
08/05/05 10:50:41 s9uZVH7I0
VMwareFusion 入れて、Linux でも入れたらいい
693:名称未設定
08/05/05 10:58:36 AsYtznAP0
>>689
-archオプションの数だけコンパイラが動くので,
2つつけると,ヘッダーファイルの依存関係を調べたりする処理が
あればエラーになる場合が多い。
そういう時は,別々の設定でコンパイルして,出来たファイルを退避しておいて
$ lipo -arch i386 postgres.i386 -arch x86_64 postgres.x86_64 -output postgres
みたいに,2つをくっつけてuniversal binaryを作ればいい。
ライブラリも同じ処理でuniversal化出来る。
694:名称未設定
08/05/09 14:07:43 C5+OWRCW0
URLリンク(www.vnode.ch)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5385日前に更新/239 KB
担当:undef