macports的问题

时间:2012-01-14 18:47:31

标签: macports cairo

我在为错误的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)

2 个答案:

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