我已经将Mac升级到macOS 10.12.0 Sierra,并且我正在尝试将PHP升级到7.0.9版本,但是'进行测试'失败了:
Undefined symbols for architecture x86_64:
"_libiconv", referenced from:
_zif_iconv_substr in iconv.o
_zif_iconv_mime_encode in iconv.o
_php_iconv_string in iconv.o
__php_iconv_strlen in iconv.o
__php_iconv_strpos in iconv.o
__php_iconv_appendl in iconv.o
_php_iconv_stream_filter_append_bucket in iconv.o
...
"_libiconv_close", referenced from:
_zif_iconv_substr in iconv.o
_zif_iconv_mime_encode in iconv.o
_php_iconv_string in iconv.o
__php_iconv_strlen in iconv.o
__php_iconv_strpos in iconv.o
__php_iconv_mime_decode in iconv.o
_php_iconv_stream_filter_factory_create in iconv.o
...
"_libiconv_open", referenced from:
_zif_iconv_substr in iconv.o
_zif_iconv_mime_encode in iconv.o
_php_iconv_string in iconv.o
__php_iconv_strlen in iconv.o
__php_iconv_strpos in iconv.o
__php_iconv_mime_decode in iconv.o
_php_iconv_stream_filter_factory_create in iconv.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libs/libphp7.bundle] Error 1
我编译它:
./configure --prefix=/usr/local/php5 --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --with-config-file-path=/etc --with-zlib --with-zlib-dir=/usr --with-openssl=/usr/local --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-sockets --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-apxs2=/usr/local/apache2/bin/apxs --enable-zip --with-curl
并尝试添加不同的' - with-iconv-dir ='选项但总是得到相同的未定义符号错误。
我已经下载并编译了libiconv无济于事。甚至配置编译:
CFLAGS =' -arch x86_64' CCFLAGS =' -arch x86_64' CXXFLAGS =' -arch x86_64'的./configure
但这没有任何区别。有什么建议吗?
非常感谢任何帮助。
答案 0 :(得分:4)
这可能会解决问题
vim Makefile
find EXTRA_LDFALGS and EXTRA_LDFLAGS_PROGRAMS
remove L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib
答案 1 :(得分:0)
(libiconv will install in /usr/local/opt/libiconv/)
-liconv
更改为/usr/local/opt/libiconv/lib/libiconv.dylib
这是原因:
libiconv.dylib
中拥有自己的dir/usr/lib/libiconv.dylib
,但没有
包含_libiconv _libiconv_close . founctions
。更新到新的libiconv版本,并对其进行引用将解决此问题答案 2 :(得分:-1)
我会教你的。这是由于您的php源代码编译过程中的符号损坏所致。
由于OS X使用基于llvm工具链的clang,并且php原始源代码基于GNU库,在该库中,它仅与gcc兼容,而不与您已经熟悉的clang兼容。
**
他们的体系结构似乎不兼容。
**
总而言之,原始的libiconv源代码肯定与OS X不兼容。 在OS X中通过命令安装可以解决以下问题:
安装libiconv。
taehwanjeoung @ taehwanui-MacBookAir〜%brew安装libiconv
更新自制软件... ==>自动更新的自制软件! 更新了1个水龙头(自制/核心)。 ==>新公式 ghz ==>更新公式 炸药-repl contentful-cli gwt libwebsockets盐 angular-cli detekt homeassant-cli地图服务器Stress-ng ask-cli ethereum katago php最高等级 bazel exploitdb勒纳php@7.2 仿生Fastlane libdeflate php@7.3 柯南·盖茨比-cli libmypaint pidgin
警告: libiconv 1.16 已安装并且是最新的
要重新安装1.16,请运行brew reinstall libiconv
因为它将安装带有完整x86-64bit符号的OS X兼容库。
昨天我要练习php 5早期版本时遇到了同样的问题。我已在OS X上成功编译-最新版本为“ Mac OS X 10.15.4,Catalina”。
我建议您不要像往常一样使用每个开发工具链的最新版本。在某种程度上,您的冲突会更少,这直接意味着您在执行更重要的任务时会花费更少的时间。
甚至在命令“ make”在OS X上编译之前,甚至需要编辑Makefile。
Mac开发人员经常使用“ nano命令行工具而不是vi”:
nano Makefile
,然后找到EXTRA_LIBS环境变量,将-liconv更改为/usr/local/opt/libiconv/lib/libiconv.dylib-自制软件安装Mac OS X兼容库的位置。 因为-liconv的默认路径在其他位置:/ usr / lib /-与损坏的体系结构符号不兼容的位置。
那么您在哪里可以看到Linux内核系统和OS X系统之间的区别: .so文件扩展适用于linux one,dylib适用于mac os One?
名称暗示它们的编译体系结构和内部结构 有点不同。
在上面的答案片段旁边,我为您添加了更合理的细节,以便清楚地说明。
所以让我解释一下:
这是您的GNU源代码中损坏的体系结构符号的问题 与OS X Unix系统不兼容的代码编译 环境。 因为OS X比Linux内核更像是BSD系统。
我建议您阅读“软件”一书 工匠-由Sandro Mancuso撰写。“ 开发和调试我个人可以想到的空间。有人否认 不知何故。