2011-06-17 98 views
3

为了在Mac OS X(10.6.7)上构建64位PicoLisp,我似乎遇到了OSX Dev的一个问题。工具GNU汇编程序('as'),版本为1.38。我的Xcode是3.2.4版本。在我的(产生的)x86-64.darwin.base.s导致这些问题的线路通常是这样的:OSX GNU汇编程序问题'call foo @ plt'

call [email protected] 

......他们给我的错误信息是这样的:

x86-64.darwin.base.s:41694:junk `@plt' after expression 

64位PicoLisp在Linux和SunOS上没有问题。这些平台可能具有更强大(更新版本)的GNU汇编器。我不知道是否有更新的GNU汇编程序可用于OSX/Darwin ...或者还有其他解决方案吗?

如果你想亲自尝试OSX/Darwin,我可以给你一些需要的文件。

+0

什么开发工具的版本您使用的? Xcode 3.2.x? Xcode 4.x? – 2011-06-17 11:20:55

+1

在某些时候,我遇到了非常类似的问题 - 用我自己的代码。很奇怪地交换了一些输入寄存器的顺序,似乎解决了它。然后再一次,它似乎是首先打破了它自己。 – 2011-06-17 11:21:20

回答

4

不幸的是,我认为这里有至少两个显著的​​问题:

  1. “PLT”是一个ELF概念,但OS X采用的是完全不同的对象/可执行文件格式 - 的Mach-O。
  2. 苹果as似乎从GNU汇编器的更早版本的叉子导出,在一些地方,语法(和命令行选项)是从最近的版本(即使该概念是相同的,而不同)。

看起来好像在最近的binutils中已经有一些关于i386和x86-64 Mach-O的支持;可能值得研究最新版本(2.21)。但是,如果生成的汇编代码试图做聪明的事情是ELF特定的,你很可能将会有一些重大的问题,反正...