質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

Q&A

解決済

PHP8.1 ビルドで so ファイルが作成されない。

mag
mag

総合スコア1

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

1回答

0グッド

0クリップ

163閲覧

投稿2022/11/10 01:34

発生している問題

AWS EC2 の RedHat 7.5 で PHP8.1 をソースからビルドする作業をしています。
各種拡張モジュールを組み込む必要があるのですが、まず最初の bzip2 の組み込みがうまく行っていません。

configure で --with-bz2 を設定していますが、bz2.so ファイルが作成されません。

経緯

これまで PHP は yum 等でのインストールに頼っていましたが、セキュリティアップデートを適用するため、最新版のインストールを行っています。

現在作業しているのは AWS で新しく作成した EC2 インスタンスで、apache のインストールを行いましたが、その他はビルド関連のツールをインストールしただけでほぼ初期状態です。

大まかにはコンパイル、ビルドの流れは把握できていますが、個別の configure、make の詳細な動作については調べながらやっています。

作業内容

bzip2 は bzip2-1.0.8 をインストール済み

cd /usr/local/src/bzip2-1.0.8 make -f Makefile-libbz2_so make make install

PHP8.1 は 下記の手順でビルド(最小限のオプションで再現)

cd /usr/local/src/php-8.1.11 ./configure --with-bz2 make make install

エラー内容

# /usr/local/bin/php -v PHP Warning: PHP Startup: Unable to load dynamic library 'bz2' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2 (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2.so (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'bz2' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2 (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2.so (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/bz2.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP 8.1.11 (cli) (built: Nov 10 2022 10:05:09) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.11, Copyright (c) Zend Technologies

ここまでの確認内容

extension フォルダに bz2.so が出力されていない。

#ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20210902/ total 9664 -rwxr-xr-x. 1 root root 9893448 Nov 10 10:06 opcache.so

make install で php 作業フォルダの modules フォルダからコピーされていると思われるが、ここにもない。

# ls -l modules total 9664 -rwxr-xr-x. 1 root root 9893448 Nov 10 09:57 opcache.so

ビルド時に作成される bz2.so も見当たらない。

# ls -l ext/bz2/.libs total 196 -rw-r--r--. 1 root root 77800 Nov 10 09:58 bz2_filter.o -rw-r--r--. 1 root root 120496 Nov 10 09:58 bz2.o

Makefile 中、bz2 に関連しそうな部分

----(略)---- CONFIGURE_COMMAND = './configure' '--with-bz2' 'PKG_CONFIG_PATH=/usr/local/lib/pkgconfig' CONFIGURE_OPTIONS = '--with-bz2' 'PKG_CONFIG_PATH=/usr/local/lib/pkgconfig' ----(略)---- BZ2_SHARED_LIBADD = ----(略)---- PHP_GLOBAL_OBJS = --(略)-- ext/bz2/bz2.lo ext/bz2/bz2_filter.lo --(略)-- ----(略)---- EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lbz2 -lutil -lrt -lm -ldl -lxml2 -lsqlite3 -lxml2 -lsqlite3 -lxml2 -lxml2 -lxml2 -lxml2 -lcrypt ----(略)---- PHP_PHARCMD_EXECUTABLE = ` \ if test -x "$(top_builddir)/$(SAPI_CLI_PATH)"; then \ $(top_srcdir)/build/shtool echo -n -- "$(top_builddir)/$(SAPI_CLI_PATH) -n"; \ if test "x$(PHP_MODULES)" != "x"; then \ $(top_srcdir)/build/shtool echo -n -- " -d extension_dir=$(top_builddir)/modules"; \ for i in bz2 zlib phar; do \ if test -f "$(top_builddir)/modules/$$i.la"; then \ . $(top_builddir)/modules/$$i.la; $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; \ fi; \ done; \ fi; \ else \ $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; \ fi;` ----(略)---- -include ext/bz2/bz2.dep ext/bz2/bz2.lo: /usr/local/src/php-8.1.11/ext/bz2/bz2.c $(LIBTOOL) --mode=compile $(CC) -Iext/bz2/ -I/usr/local/src/php-8.1.11/ext/bz2/ $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -c /usr/local/src/php-8.1.11/ext/bz2/bz2.c -o ext/bz2/bz2.lo -MMD -MF ext/bz2/bz2.dep -MT ext/bz2/bz2.lo -include ext/bz2/bz2_filter.dep ext/bz2/bz2_filter.lo: /usr/local/src/php-8.1.11/ext/bz2/bz2_filter.c $(LIBTOOL) --mode=compile $(CC) -Iext/bz2/ -I/usr/local/src/php-8.1.11/ext/bz2/ $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -c /usr/local/src/php-8.1.11/ext/bz2/bz2_filter.c -o ext/bz2/bz2_filter.lo -MMD -MF ext/bz2/bz2_filter.dep -MT ext/bz2/bz2_filter.lo ----(略)----

同じく Makefile 中、出力されている opcache.so については、下記の行があるが、bz2 の該当行は見当たらず。

ext/opcache/opcache.la: $(shared_objects_opcache) $(OPCACHE_SHARED_DEPENDENCIES) $(LIBTOOL) --mode=link $(CC) -shared $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_opcache) $(OPCACHE_SHARED_LIBADD)

configure での処理に原因があると考えて、現在 configure ファイルを解析中。

なお、configure 実行時に下記の出力があるので、bz2 の認識に問題はないと考えている。

checking for BZip2 support... yes checking for BZip2 in default path... found in /usr/local checking for BZ2_bzerror in -lbz2... yes

何か見落としている点、必要なオプションなどがあればご指摘いただければ助かります。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

解決できたっぽいです。

./configure --with-bz2

./configure --with-bz2=shared

これで、shared library object が生成される感じです。

投稿2022/11/10 02:53

mag

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます