PHP编译失败,未定义符号用于架构x86_64,macOS Sierra上的libiconv

时间:2016-10-21 02:15:50

标签: php macos iconv macos-sierra libiconv

我已经将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

但这没有任何区别。有什么建议吗?

非常感谢任何帮助。

3 个答案:

答案 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)

  1. 简单安装libiconv (libiconv will install in /usr/local/opt/libiconv/)
  2. 在MakeFile中找到 EXTRA_LIBS 变量。
  3. -liconv更改为/usr/local/opt/libiconv/lib/libiconv.dylib

这是原因:

  • Mac os在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撰写。“ 开发和调试我个人可以想到的空间。有人否认 不知何故。