Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)

No.3142  PHPのdll生成時undefined reference toについて
発言者: 青空高志
発言日: 2006 02/21 11:23
 
お知恵を拝借させてください。

CYGWIN+Apache+PostgreSQL+PHPを構築しています。
シンボリックリンクを多用するためにCYGWINでApacheを運用する必要があり、ネイティブ版では実現できません。
ネイティブ版による同構成とPostgreSQLのみCYGWINで稼動させてApache、PHPネイティブ版を使用する環境構築は過去に実績があり動いています。

上記の目的により、すべてソースからのビルドを行っていますが、PHPのmake後のdll生成でリファレンスエラーに苦慮しています。

phpのconfigureに「--with-pgsql=ライブラリの場所」を付加するとdll生成時に次のエラーを表示します。
Creating library file: libphp4.dll.a
libphp4.a(pgsql.o): In function `_close_pgsql_link':
/usr/src/php-4.4.2/ext/pgsql/pgsql.c:277: undefined reference to `_PQclear'
/usr/src/php-4.4.2/ext/pgsql/pgsql.c:277: undefined reference to `_PQgetResult'
(以下同様に200行ほど表示)

gccコマンドラインは、次のように使用しています。
$ gcc -shared -o libphp4.dll -Wl,--out-implib=libphp4.dll.a -Wl,--export-all-symbols -Wl,--whole-archive libphp4.a /usr/local/apache/libexec/libhttpd.dll -Wl,--no-whole-archive -lcrypt

各デーモンのバージョンを変更したり、バイナリーパッケージを使用したりと方策を尽くしましたが、個々のデーモンはmakeに問題もなく、個別のテストランでも正常に機能していますので、PHPのビルド以降、またはdll生成時の問題と考えています。
phpコンパイルオプションに--with-pgsqlを使用しなければ、dllは生成され、make install後の動作は正常です。
libphp4.aおよびpgsql.cには、エラー表示される関数名エントリーは存在しますので、参照方法などに起因した問題であると予想していますが、行き詰っております。
解決策をお持ちの方は、ぜひご教示ください。お願いします。

http://www.sixnine.net/cygwin/translation/cygwin-ug-net/dll.html
によりますところの、4.3.2にありますdllのストリップとの関連も疑っていますが、対処法が思い浮かびません。

よろしくお願いします。


以下は、環境です。

$ cygcheck -cd cygwin gcc
Cygwin Package Information
Package Version
cygwin 1.5.19-4
gcc 3.4.4-1

Apache   1.3.33-2、1.3.34などのソース、binパッケージをテスト
PostgreSQL 8.1.0、8.0.4など
PHP     4.4.2(cygwinソースより)

PostgreSQL依存パッケージは次のように確認
$ grep -A10 '@ postgresql' /cygdrive/c/CYGWINSOURCE/ftp%3a%2f%2fring.exp.fujixerox.co.jp%2farchives%2fpc%2fgnu-win32/setup.ini | grep requires
requires: crypt cygwin libncurses8 libreadline6 libintl3 openssl zlib

バージョンチェック
$ cygcheck -cd `grep -A10 '@ postgresql' /cygdrive/c/CYGWINSOURCE/ftp%3a%2f%2fring.exp.fujixerox.co.jp%2farchives%2fpc%2fgnu-win32/setup.ini | grep requires | gawk '{$1="";print}'`
Cygwin Package Information
Package Version
crypt 1.1-1
cygwin 1.5.19-4
libintl3 0.14.5-1
libncurses8 5.4-4
libreadline6 5.1-3
openssl 0.9.8a-1
zlib 1.2.3-1


▼関連発言

3142:PHPのdll生成時undefined reference toについて [青空高志] 02/21
 └3143:Re:PHPのdll生成時undefined reference toについて [青空高志] 02/22 <

Pass 保存

早田のホームページへ
CGIROOM