雪豹系统上的Eclipse CDT无法找到二进制文件

3

升级到Snow Leopard系统后,我无法在电脑上运行Eclipse CDT项目。虽然构建过程没有任何错误,但Eclipse无法识别它所创建的二进制文件。当尝试在Run Configuration..对话框中指向二进制文件时,无法在项目中找到任何二进制文件。但是从终端执行文件可以正常工作。

根据Eclipse论坛上一篇文章的说法,这可能是Mach-O解析器无法识别64位二进制文件的问题。有人知道问题的解决方案或解决方法,以便我可以在Snow Leopard上运行/调试我的C++项目吗?

更新

Shane提出的解决方案虽然允许识别所创建的二进制文件,但也带来了另一个问题。由于Snow Leopard系统中的系统库全部是64位的,因此不再可能使用-arch i386将创建的代码与这些库链接起来,因此目前还不是可行的解决方案。


是的,您需要启用正确的二进制解析器才能让 Eclipse 识别它。如果我错了,请纠正我,但在解析方面,64 位二进制文件和 32 位二进制文件之间没有区别。操作码的长度仍然相同,不是吗?只是字长从 32 位变成了 64 位。 - ldog
这种绕过方式编译成32位二进制文件的后果是,我的代码无法再链接到MacPorts库,因为它们是以64位编译的。是否有其他可能的解决方案,例如更改二进制解析器以支持解析64位二进制文件? - ejel
5个回答

3
根据您引用的帖子,您需要在项目的编译器和链接器设置中添加-arch i386。然后重新构建项目,CDT将获取可执行文件。
项目属性-> C / C ++构建->设置。然后在编译器和链接器Miscellaneous部分中添加标志到其他标志。
干杯!

1
这个建议很有用。之前,我只是向编译器添加了“-arch i386”标志,却没有意识到链接器也起着作用。 - ejel
抱歉之前接受了答案然后又撤回了。我发现由于系统库的链接问题,解决方案实际上并不可行,这些库是64位的。请参见我的更新问题。 - ejel

2
由于Eclipse的二进制解析器尚未更新以识别新的64位Mach-O二进制格式(https://bugs.eclipse.org/bugs/show_bug.cgi?id=270790),现在看起来唯一的解决方法是以32位模式编译代码。
其结果是无法将C/C++项目链接到任何系统库,因为它们大多已经编译为64位。
我现在的解决方案是暂时切换到XCode。

您现在可以在上面的链接中找到修复此问题的补丁。 - ejel

1
一个新的Mach 64位二进制解析器终于发布了。
我刚刚在Eclipse中进行了更新,并在项目属性下选择了新的二进制解析器。我终于可以在Eclipse中运行我的C++二进制文件,但是我仍然在为某些原因而苦苦挣扎着调试。

1

gmatt,

64位二进制文件与新架构不同,因为新架构具有新的通用寄存器。此外,架构中还有更多的差异会影响您在二进制文件中看到的操作码。

祝好, Shane


0
据我所知,二进制解析器位于[项目属性-> C / C ++构建->设置]中,如上所述。但我认为它已经改变了。
我可以通过以下方式找到二进制解析器: [eclipse->环境->C / C ++->新建C / C ++项目向导-> makefile项目->二进制解析器->mach-O解析器(已弃用)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接