我在为错误的CPU架构构建一些端口时遇到了一些其他问题,我正在尝试将所有内容重建为通用。
我已经完成了:sudo port upgrade outdated +universal
,它运行了很长时间,似乎安装了很多我不需要的东西。但它没有失败。
然后我尝试使用其中一个我以前遇到过问题的库:
$ sudo port install cairo +universal
Password:
---> Building libpixman
Error: Target org.macports.build returned: shell command failed (see log for details)
Log for libpixman is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_libpixman/libpixman/main.log
Error: Unable to upgrade port: 1
Error: Unable to execute port: upgrade libpixman failed
To report a bug, see <http://guide.macports.org/#project.tickets>
日志在这里http://hpaste.org/56449 (OSX 10.6.8,Intel Core i5)
答案 0 :(得分:3)
sudo port upgrade outdated +universal
只会升级自安装以来已更改的端口,因此如果端口未更改,则不会安装/重新编译。
第一步并非严格要求,但如果您拥有特定端口的多个版本,则会删除一些问题。此步骤是删除所有非活动端口sudo port uninstall inactive
要重新编译所有端口,请使用sudo port upgrade --force installed +universal
安装的关键字将获取所有端口,-force将确保重建所有端口。
为了使将来更容易,您应该更改macports配置以构建通用,而无需在port命令上执行此操作。你可以通过在/opt/local/etc/macports/variants.conf中加上+ universal来实现这个目的。
答案 1 :(得分:1)
问题是你已经指定了+universal
,所以它正在尝试构建32位和64位架构(x86_64和i386)......
:info:build ---> Building libpixman for architecture x86_64
...and then later...
:info:build ---> Building libpixman for architecture i386
但在32位构建中失败
:info:build ld: warning: in /opt/local/lib/libpng14.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
它在32位版本中失败,因为libpng是为64位构建的,无法与32位版本链接。
如果您不需要通用版本,请移除+universal
,问题就会消失!
如果你确实需要通用构建......那么,macports应该弄明白。我相信问题是libpixman没有声明任何依赖(libpng似乎是一个可选的dep)。 Macports无法知道它必须构建一个32位版本的libpng。无论如何,这是我最好的猜测。
这是exactly your bug。不幸的是,维护者的结论是你应该手动强制重新编译libpng为32位。这是一个糟糕的解决方案,因为它打破了自动通用版本达到gtk2及更高版本。真正的问题是缺少依赖性,如果没有它,Macports就无法知道重建libpng。