启动失败。找不到二进制文件。Snow Leopard和Eclipse C/C++ IDE问题

23

这并不是一个问题,我只是在网上搜索了很久才找到了解决这个问题的方法,并想与 SO 社区分享。我会用简单易懂的语言来表述,以方便新手理解。(如果我放错地方了,请见谅。)

这个问题几乎发生在任何试图使用 Eclipse C/C++ IDE 的 OS X Snow Leopard 用户身上,但对那些在 Leopard 使用 Eclipse C/C++ IDE 并在升级后无法继续使用 Eclipse 的人(例如我)尤其恼人。这个问题出现在用户尝试构建/编译/链接他们的软件时。他们会得到以下错误:

Launch Failed. Binary Not Found.

此外,左侧项目窗口中的“二进制文件”分支根本不存在。

问题在于 Snow Leopard 自带的 GCC 4.2(GNU Compiler Collection)默认编译为 64 位二进制文件。不幸的是,Eclipse 使用的链接器不理解 64 位二进制文件;它只能读取 32 位二进制文件。可能还有其他问题,但总之,它们导致没有生成二进制文件,至少没有 Eclipse 能够读取的二进制文件,这就导致了错误。

一个解决方案是在制作文件时添加 -arch i686 标志,但每次手动制作文件都很麻烦。幸运的是,Snow Leopard 还带有 GCC 4.0,默认编译为 32 位二进制文件。因此,一个解决方案仅仅是将其链接为默认编译器。这就是我所做的。

解决方法:GCC 位于 /usr/bin 目录中,通常是隐藏的文件夹,因此您无法在 Finder 中看到它,除非您明确告诉系统要查看隐藏文件夹。无论如何,您想要做的是转到 /usr/bin 文件夹,并删除将 GCC 命令与 GCC 4.2 链接的路径,并添加将 GCC 命令与 GCC 4.0 链接的路径。换句话说,当您或 Eclipse 尝试访问 GCC 时,我们希望命令去到默认编译为 32 位二进制文件的编译器,以便链接器可以读取文件;我们不希望它转到编译为 64 位的编译器。

执行此操作的最佳方法是转到应用程序/实用程序,并选择名为“终端”的应用程序。会出现一个文本提示符。它应该显示类似“(计算机名称):~(用户名)$”的内容(后面有您的用户输入空格)。完成上述任务的方法是按顺序输入以下命令,并在每个单独的行后按 Enter 键。

cd /usr/bin
rm cc gcc c++ g++
ln -s gcc-4.0 cc
ln -s gcc-4.0 gcc
ln -s c++-4.0 c++
ln -s g++-4.0 g++

和我一样,您可能会收到一条错误消息,告诉您没有权限访问这些文件。如果是这样,请尝试以下命令:

cd /usr/bin
sudo rm cc gcc c++ g++
sudo ln -s gcc-4.0 cc
sudo ln -s gcc-4.0 gcc
sudo ln -s c++-4.0 c++
sudo ln -s g++-4.0 g++

Sudo可能会要求你输入密码。如果你以前从未使用过sudo,请尝试只按回车键。如果不起作用,请尝试使用你主管理员帐户的密码。

其他可能的解决方法: 你可以在Eclipse中输入构建变量。我尝试过这个方法,但是我对它了解得不够。如果你想尝试一下,你可能需要的标志是-arch i686。实际上,GCC-4.0一直在为我工作,我没有理由现在改变它。也许有一种方法可以更改编译器本身的默认设置,但再次强调,我对此了解不够。

希望这对你有所帮助和启发。祝写代码愉快!


1
哦,还有一件事在更改链接之前,请不要忘记记录您的链接!如果您不想更改系统范围内的设置,请在 /usr/bin 之前添加一个目录(比如 $HOME/bin),并在那里创建符号链接。如果您想要更改回来,这是我会使用的代码:cd /usr/bin sudo rm cc gcc c++ g++ sudo ln -s gcc-4.2 cc sudo ln -s gcc-4.2 gcc sudo ln -s c++-4.2 c++ sudo ln -s g++-4.2 g++您需要检查您的 /usr/bin 并查找类似于 "gcc-4.x" 的文件。如果它不是 4.0 或 4.2,请将上面的版本号替换为您拥有的版本号。 - Alex
你应该将这个放在你的问题下面。 - sbi
1
我先遇到了这个问题:https://dev59.com/KErSa4cB1Zd3GeqPWnqW,然后紧接着又遇到了这个问题。感谢您的帖子。 - Brent Writes Code
10个回答

19

仅作记录,经过30分钟的努力,我在Lion(Mac 10.7)上解决了这个问题,方法是在“项目菜单->属性->C / C ++构建->设置->二进制解析器”选项卡下选择Mach-O 64解析器和Elf解析器(第一个选项卡,或者在Eclipse版本为3.7.2时为第三个选项卡)[顺便听着Gwen Stefani的《Sweet Escape》lol]。


1
帮了我很多,也解决了我的问题,同时在MacOS 10.9.2 Mavericks和Eclipse版本3.7.2下运行良好。谢谢! - neowinston
有没有办法让它在每个项目中都保持选中状态呢?因为这真的很烦人! - Redauser
就是这样。同意上面的评论,我想知道为什么它不是默认启用的。非常感谢。 - Natan Streppel

18

我一直收到相同的消息:

启动失败。未找到二进制文件。

因为我没有意识到需要按ctrl键并单击项目文件夹,然后选择“构建项目”。在Eclipse中的Java项目中不需要执行此操作,因此其他像我一样的初学者可能会遇到相同的问题。


1
太好了!:D 哈哈有时候我真的想象不出解决方案是多么显而易见。 - stratis
1
在MacOS 10.9.2 Mavericks和Eclipse版本3.7.2下帮了我很多忙。谢谢! - neowinston

8

如前所述,可以通过在Eclipse中添加必要的标志来轻松实现。

要这样做,请打开属性窗口,然后转到“c / c ++ build”>“设置”。 在右侧的树视图中,转到“MacOS X C Linker”和“GCC C编译器”的“其他”选项卡,并在标有“flags”的文本框中添加“-arch i686”。


5
我正在运行 Mac OSX 10.6.8,并在 Eclipse 中安装了交叉编译工具链。所以,我进行了以下操作:
  1. 在项目属性下,选择 C/C++ Build -> Tool Chain editor。
  2. 将当前工具链从 Cross GCC 更改为 MacOSX GCC。
  3. 我还将当前构建器更改为 CDT 内部构建器。(我不确定这是否有影响。)
  4. 我保留了所有设置。
  5. 重新构建。您应该在项目的 Debug 文件夹中看到与您的项目同名的二进制文件。

3

哦,还有一件事,在更改链接之前不要忘记记录你的链接!如果你不想更改系统范围内的设置,在 /usr/bin 之前添加一个目录(比如说 $HOME/bin)到 PATH 中,并在那里创建符号链接。如果你想要更改回来,下面是我会使用的代码:

cd /usr/bin
sudo rm cc gcc c++ g++
sudo ln -s gcc-4.2 cc
sudo ln -s gcc-4.2 gcc
sudo ln -s c++-4.2 c++
sudo ln -s g++-4.2 g++

你需要检查你的/usr/bin目录,寻找一个名为“gcc-4.x”的文件。如果不是4.0或4.2,请用你拥有的版本号替换上面的版本号。
编辑:哦,如果我使用GCC-4.0,我也无法运行64位碳Eclipse。然而,32位Carbon工作得很好。

1

我有一个叫做gcc_select的程序,它有一个偏好设置文件,并且允许您在多个gcc版本之间来回切换...

我想我是从macports获取的,但我不确定。


1
如上所述,只需在Eclipse中添加必要的标志即可完成此操作。
要做到这一点,请打开属性窗口,然后转到“c/c++ build”>“设置”。在右侧的树视图中,转到“MacOS X C链接器”和“GCC C编译器”的“杂项”,并在标有“flags”的文本框中附加:“-arch i686”。
请注意,如果您选择这种方法,可以通过在Bash终端(即Terminal.app)中调用命令 uname -p 并将“-arch i686”更改为“-arch -i386”来轻松检查处理器的架构。

0

嗨,我安装了32位的Eclipse,在Mac Mountain Lion上运行得非常完美。 之前在编译时遇到了“二进制文件未找到”的问题,但现在使用32位的Eclipse就没有问题了。


0

请前往项目 -> 属性; 选择 C/C++ 构建 -> 设置; 在工具设置下,将 C++ 编译器和链接器命令从 g++ 更改为 g++-4.0。如果您仍然遇到任何错误,请将 c 编译器也更改为 gcc-4.0。我也将 C 编译器设置更改为以防万一。对我来说,一切都完美地工作。


0

只需从您的项目中删除“Debug”文件夹,然后运行“构建项目”即可。

enter image description here


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