- 编译 php 时,configure 路径错误
./configure --enable-embed
会有众多报错:
clang: error: no such file or directory: 'ext/date/php_date.o'
clang: error: no such file or directory: 'ext/date/lib/astro.o'
clang: error: no such file or directory: 'ext/date/lib/dow.o'
clang: error: no such file or directory: 'ext/date/lib/parse_date.o'
clang: error: no such file or directory: 'ext/date/lib/parse_tz.o'
clang: error: no such file or directory: 'ext/date/lib/timelib.o'
clang: error: no such file or directory: 'ext/date/lib/tm2unixtime.o'
clang: error: no such file or directory: 'ext/date/lib/unixtime2tm.o'
clang: error: no such file or directory: 'ext/date/lib/parse_iso_intervals.o'
clang: error: no such file or directory: 'ext/date/lib/interval.o'
clang: error: no such file or directory: 'ext/ereg/ereg.o'
clang: error: no such file or directory: 'ext/ereg/regex/regcomp.o'
clang: error: no such file or directory: 'ext/ereg/regex/regexec.o'
clang: error: no such file or directory: 'ext/ereg/regex/regerror.o'
clang: error: no such file or directory: 'ext/ereg/regex/regfree.o'
发现 mac 下是有这样的 bug,需要手动 替换路径 https://bugs.php.net/bug.php?id=66673
vscode 替换
搜索:\/([A-Za-z0-9_-]*)\.o
替换: /.libs/$1.o
- 使用共享库的时候报错 can't link with bundle (MH_BUNDLE) only dylibs (MH_DYLIB) file
编译成功后发现 生成的是 so 的共享库 mac 有自己的 共享库的 格式,需要生成 .dylib 的共享库
通过 -fPIC -dynamiclib
和 -fPIC -shared
可以控制生成的格式
参考:
https://www.v2ex.com/t/94623
https://scc.ustc.edu.cn/zlsc/sugon/intel/compiler_f/main_for/bldaps_for/lin/bldaps_create_shlib.htm
但是 php 貌似没有可以修改的参数控制这个 然后 看了一下生成的 Makefile 文件
libs/libphp$(PHP_MAJOR_VERSION).bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp$(PHP_MAJOR_VERSION).so
这一行用于 生成共享库的 手动改一下
libphp7.dylib: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) -fPIC -dynamiclib $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
然后 手动执行
make libphp7.dylib
生成对应的 dylib 格式的共享库