OS X Eclipse C++启动失败 - 找不到二进制文件

23

我很困扰,因为这不应该让我头疼。我下载了最新版本的 Eclipse Indigo 和适用于 MAC OS X 10.7.1 / 的所有 CDT C++ 插件。

在安装上述CDT插件后重新启动,我开发了一个简单的“hello world”c ++ 应用程序,并尝试运行该应用程序,但出现了“Launch failed. Binary not found.” 错误消息。我阅读了多个修复方法,但都没有起作用。我尝试将 -arch i386 标志添加到链接器和编译器命令中,但仍然没有运气。

有人成功在 10.7.1 上运行过 Eclipse C++ 吗??? 这让我想不通。我可以在 VIM 中编写相同的程序并通过终端编译和执行。ECLIPSE 不想协作。

我将深感欠人情的人谁能帮助我!

编辑:编译器输出

**** Build of configuration Debug for project HelloWorld ****
make all Building file: ../main.cpp
Invoking: GCC C++ Compiler g++ -I/Developer/SDKs/MacOSX10.6.sdk/usr/include -O0 -g3 -Wall -c -fmessage-length=0 -arch i386 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: libHelloWorld
Invoking: MacOS X C++ Linker g++ -arch i386 -dynamiclib -o "libHelloWorld" ./main.o
Finished building target: libHelloWorld
**** Build Finished ****

是否有编译错误?您是否检查文件系统中是否创建了实际的二进制(可执行)文件? - Antonio Pérez
**** HelloWorld 项目的 Debug 配置构建 ****执行 make all 命令 正在构建文件: ../main.cpp 调用:GCC C++ 编译器 g++ -I/Developer/SDKs/MacOSX10.6.sdk/usr/include -O0 -g3 -Wall -c -fmessage-length=0 -arch i386 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp" 完成构建:../main.cpp构建目标:libHelloWorld 调用:MacOS X C++ 链接器 g++ -arch i386 -dynamiclib -o "libHelloWorld" ./main.o
完成构建目标:libHelloWorld**** 构建完成 ****
- 5k1zk17
1
构建目标已完成:libHelloWorld:您正在构建一个库,而不是可执行文件。更改项目构建设置中的设置。 - Antonio Pérez
嗯...我没有看到具体在哪里更改这个... - 5k1zk17
这可能会有用 http://stackoverflow.com/questions/27092834/setting-up-eclipse-in-os-x-c-error-launch-failed-binaries-not-found/27096018#27096018 - LoveMeow
显示剩余2条评论
15个回答

33
我正在使用带有CDT的Eclipse Juno在运行Snow Leopard的2007年Macbook上。我有以下两个症状:
  1. 项目资源管理器中没有二进制文件夹。
  2. '启动失败。找不到二进制文件'的错误。
我已经花了数小时在Google上搜索答案,长到足以确定这两个症状是任何数量的问题的指示,这些问题已经被报道了将近十年,但没有得到充分的解决。这本身就是一个问题,因为十年后,应该有足够的输入数据提供一种排除所有可能原因的步骤。
相反,在几个小时内,我阅读了众多人的文章,其中许多人已经解决了他们特定的问题,但所有这些人似乎都必须做一些略微不同的事情才能到达那里。
这应该不难解决。特别是在像我这样的情况下[但我并不是唯一一个],当控制台视图显示无错误的构建时,用户可以将二进制文件[Eclipse奇怪地说它找不到]复制到桌面并从Finder或bash终端会话中运行而没有任何问题。
所有这些似乎都非常强烈地指向了Mach0 64二进制解析器中不足的指示器,在设计时应该告诉我们准确地它需要什么,而它没有看到。
无可否认,在像我这样的MacBook上运行64位OS [Snow Leopard]的情况下,这种情况会加剧,但制造商不幸地通过32位启动内核束缚了64位CPU。但是,请注意,我已经尝试过-arch i386 g++开关,并重新链接g++到g++-4.0,但症状没有变化。
2012年10月07日添加附录:
我添加了此清单,希望澄清未来许多人将提出这个问题的方法。当使用在运行Snow Leopard的Mac上运行Eclipse Juno时,此方法反映了我发现必要的内容:

1) 转到首选项->C/C++->新建CDT项目向导,然后在首选工具链下,确保所有可执行项目类型都设置为MacOSX GCC。

2) 这是一个重要的提示。我能够在项目资源管理器中获得Binaries文件夹,并且在构建项目后运行它,是因为使用了不包含句点['.']的项目名称。我是从这里的另一个答案中学到的,编辑自前一条信息发布几个小时后。这个需求很容易被忽视,尤其是如果您熟悉Eclipse但只使用其他语言的情况下,因为用于其他语言插件(例如PyDev或Java)的教程经常让您创建带有句点名称的项目。如果您已经养成了使用其他语言的习惯,请在使用CDT用于C/C++时打破这种习惯。请注意,仅仅右键单击并重新命名现有项目名称,这次不使用句点,是不够的。最简单的方法是删除旧项目并创建一个名称不使用句点的新项目。

3) 有许多网站警告您务必使用-arch i386编译器开关或更改链接指向gcc-4.0和g++-4.0而不是gcc-4.2和g++-4.2的链接。我创建了一个bash脚本来轻松切换并调查是否需要这样做。至少对于我的Macbook而言,这是不必要的。根据我从一个Mach-O开发人员网站上读到的内容,我怀疑当前版本的Mach-0 64可以两个都兼容。这也是一个很好的过渡到......

4) 在项目属性中(而不是首选项),转到C/C++ Build->Settings,然后在二进制解析器下确保选中了Mach-O 64位解析器,而不是弃用的Mach-O解析器。

5) 此时,在构建项目后,项目资源管理器中应该出现以下几个明显的内容:

6) 现在应该有一个Binaries文件夹位于项目文件夹下。

7) 在Binaries文件夹中现在应该有你的可执行文件。如果你的Mac是32位的,像我一样,它旁边应该有 [x86_64/le]。现在不是讨论你的Mac是32位还是64位的混乱话题的最佳时机。如果你不知道,很多人不知道,因为苹果让这个问题变得混乱,那么可以查看从 http://www.ahatfullofsky.comuv.com/English/Programs/SMS/SMS.html 下载的小应用程序,它会告诉你究竟是什么。它是免费的,但“价格”是你必须向上滚动页面上反映程序员政治倾向的广告。


这个答案太棒了!谢谢。我从来没有想过在Mac上找到Eclipse和C++的基本“入门”步骤会这么难。 - Charlie Flowers
什么胜利。感谢您将这一点知识放入以太中。 - Andreas GS

32

对于那些初学编程 / Eclipse / IDE 的人,如果您遇到相同的错误,但上述解决方案不起作用,我通过以下方式解决了我的“启动失败。未找到二进制文件。” 错误:在尝试运行或调试之前,务必构建项目(“项目”>“全部构建”)。我以为当我点击调试或运行时IDE会进行构建,但事实并非如此(显然,回顾一下)。新手教训已经吸取。一旦构建完成,您应该在项目根目录下看到“二进制”和“调试”文件夹。

如果有影响的话,我使用的是OS X 10.7.3,但我认为我犯的错误是基本的,任何Eclipse版本都会产生同样的错误。


1
为什么事后看起来这么明显呢? - user1971598
1
在尝试运行之前,请先“构建项目” <-- 这个完美地运作了! - Nari Kim Shin
我同意应该有一个“构建和运行”的选项。我发誓几年前还有这个选项,但现在已经没有了。我也认为“运行”也会编译... - bafromca

10

在Mac上:

  1. 确保你已经安装了Xcode。通过编写“info g ++”来测试它,你必须看到关于编译器的正确信息。

  2. 构建你的项目。

  3. 进入你的项目文件夹。在Debug或realise文件夹中,你应该会看到一个可执行文件。如果你双击可执行文件,你应该会在终端上看到结果。

  4. 回到Eclipse,在“Run/Run Configurations…”中浏览到你找到的可执行文件所在的文件夹,你还可以在该窗口中根据需要更改构建配置,并使每次运行自动构建。

  5. 再次运行应该就可以正常工作了。

祝你好运!


7
我曾经遇到过同样的问题,后来在这个网站上找到了解决方案。 让我简单地解释一下:
  1. 创建你的C++项目,
  2. 查看项目属性(⌘I),
  3. 在二进制属性下选择Mach-O解析器,
  4. 编写你的代码,
  5. 在运行之前不要忘记构建你的项目(⌘B)。

2
你应该解释解决方案,而不仅仅给出链接。 - Arnaud Rinquin
感谢您的建议。我尽可能简洁地解释了解决方案。 - Fraukn

4
你应该更改项目设置,以构建可执行文件而不是动态库:

调用:MacOS X C ++链接器g ++ -arch i386 -dynamiclib -o“libHelloWorld” ./main.o`

进入项目属性-> C / C ++ Build->设置->构建工件,并在第一个下拉列表中选择可执行文件


3

我正在使用Eclipse Oxygen,以下方法解决了我的问题:

右键单击您的项目并进入属性。导航到C/C++ Build > 工具链编辑器,选择MacOSX GCC作为当前工具链,然后选择应用和关闭

使用CMD+B构建项目,然后运行它。

Eclipse Oxygen


2
如果您的项目名称包含"."(点),则在构建项目时不会生成二进制文件。 请从项目名称中删除所有"."(点)并重新构建它,或者尝试创建一个新项目。
祝编码愉快!

2
如果您可以成功构建,但在尝试运行时出现错误:

enter image description here

可能的解决方案是添加新的配置,包含输出二进制文件的完整路径
(Run->Run Configuration...->Main->C++ Application):

enter image description here


2
我也遇到了相同的问题。由于“二进制文件未找到”的问题以前已经多次出现,其原因和解决方法也不尽相同(例如选择64位解析器等),因此答案可能比较难找到。
在我的情况下,解决方法很简单:每当创建新项目时,只需手动构建一次即可。之后,就可以像平常一样工作了。
具体方法是:我在Mac OS 10.7.2上使用全新安装的Eclipse Indigo Service Release 1。

1

我使用Eclipse创建了“启动配置”来解决类似的问题。我在OSX Lion上使用CDT(C/C++开发环境)中的Indigo版本。我在“项目”->“属性”->“运行/调试设置”中找到了创建新启动配置的选项。

我在创建并构建一个空的“Hello World Ansi C Autotools Project”后遇到了这个问题。构建过程创建了一个工作的可执行文件src/a.out。我可以从终端成功地运行a.out,但是Eclipse没有理解这是我的项目的可执行文件,直到我创建了指向它的启动配置。一旦我这样做了,我就能够像往常一样使用绿色运行按钮运行a.out。


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