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

Posted

技术标签:

【中文标题】OS X Eclipse C++ 启动失败 - 找不到二进制文件【英文标题】:OS X Eclipse C++ Launch Failed - Binary Not Found 【发布时间】:2011-11-20 08:33:49 【问题描述】:

我很困扰,因为这不应该让我这么头疼。我已经下载了最新的 Eclipse Indigo 和 all 适用于 MAC OS X 10.7.1/

的 CDT C++ 插件

安装上述 CDT 插件后重新启动后,我开发了一个简单的“hello world”c++ 应用程序并尝试运行该应用程序,“启动失败。找不到二进制文件。”错误信息。我已经阅读了多个修复程序,但没有一个有效。我尝试在链接器和编译器命令中添加 -arch i386 标志,但仍然没有成功。

有没有人成功让 Eclipse C++ 在 10.7.1 上运行??????这让我大吃一惊。我可以简单地在 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 ****

【问题讨论】:

有没有编译错误?您是否检查文件系统中是否创建了实际的二进制文件(可执行文件)? 没有编译错误,构建成功完成。我不相信正在创建二进制文件......' 您能否发布您在“控制台”窗口中收到的编译输出消息? **** 构建配置 调试项目 HelloWorld **** 生成所有构建文件:../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++ Linker g++ -arch i386 -dynamiclib -o "libHelloWorld" ./main.o 完成构建目标:libHelloWorld ****构建完成**** 已完成构建目标:libHelloWorld:您正在构建库,而不是可执行文件。更改项目构建设置中的设置。 【参考方案1】:

我在运行 Snow Leopard 的 2007 Macbook 上使用带有 CDT 的 Eclipse Juno。我有两个症状:

    Project Explorer 中没有 Binaries 文件夹,并且 “启动失败。找不到二进制文件”错误。

我花了几个小时在 Google 上搜索答案,足够长的时间来确定这两个症状表明存在许多问题,这些问题已经报告了不到 10 年,但没有得到足够的解决。这是一个问题,因为十年后应该有足够多的输入数据来提供一个故障排除程序,该程序可以引导用户逐步消除所有可能的原因。

相反,几个小时以来,我读到了很多人,他们中的许多人已经解决了他们的特定问题,但他们似乎都不得不做一些稍微不同的事情才能到达那里。

这应该不难解决。特别是在像我这样的情况下[但我不是唯一的],当控制台视图显示没有错误的构建但用户可以将二进制文件 [Eclipse 奇怪地说它找不到] 复制到桌面并在没有错误的情况下运行它Finder 或 bash 终端会话的任何问题。

所有这一切似乎都在强调Mach0 64 二进制解析器中缺乏足够的指标,这应该被设计为准确地告诉我们它需要什么而它没有看到

诚然,像我这样在 64 位 CPU 上运行 64 位操作系统 [Snow Leopard] 的 MacBook 会加剧这种情况,但不幸的是,制造商使用 32 位启动内核阻碍了这种情况。但是,请注意,我已经尝试了 -arch i386 g++ 开关,以及将 g++ 重新链接到 g++-4.0,但症状没有任何变化。

2012 年 10 月 7 日添加的附录:

我添加此清单是为了为未来几年无疑会提出这个问题的许多其他人阐明一种方式。这种方式反映了我在运行 Snow Leopard 的 Mac 上使用 Eclipse Juno 时发现的必要条件:

1) 转到 Preferences->C/C++->New CDT Project Wizard,然后在 Preferred Toolchains 下,确保所有 Executable 项目类型都设置为 MacOSX GCC。

2) 这是一个大问题。我能够在 Project Explorer 中获得一个 Binaries 文件夹,因此能够在构建项目后运行项目,方法是使用不包含点 ['.'] 的项目名称。这是我从另一个答案中学到的,在我上一条消息后几个小时编辑。这个要求很容易被忽略,因此这是一个常见的要求,特别是如果您有 Eclipse 经验但只使用其他语言,因为其他语言插件的教程 [例如 PyDev 或 Java] 经常让您创建名称中带有点的项目。如果您在使用其他语言时养成了这种习惯,请在使用 CDT for C/C++ 时打破它。但是,请注意,这次仅右键单击并重命名现有项目名称而不使用点是不够的。最简单的方法是删除旧项目并创建一个名称不带点的新项目。

3) 有许多网站提醒您确保使用 -arch i386 编译器开关或将 /usr/bin/gcc 和 /usr/bin/g++ 的链接更改为指向 gcc-4.0 和 g++- 4.0 而不是 gcc-4.2 和 g++-4.2。我创建了一个 bash 脚本来简化来回切换并调查是否有必要。不是,至少在我的 Macbook 上不是。根据我在一个站点上从 Mach-O 开发人员那里读到的内容,我怀疑当前版本的 Mach-0 64 是双向的。这是一个很好的选择...

4) 在项目属性中,而不是首选项中,转到 C/C++ Build->Settings 并在 Binary Parsers 下确保选中 Mach-O 64 Parser。确保检查这个,而不是已弃用的 Mach-O 解析器。

5) 此时,在您构建项目之后,项目资源管理器中应该有几件事很明显:

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

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

【讨论】:

这个答案太棒了!谢谢你。我从没想过在 mac 上找到 Eclipse 和 C++ 的基本“入门”步骤会这么难。 什么赢了。感谢您将这一点知识放在以太中。【参考方案2】:

对于那些不熟悉编程/eclipse/IDE 并遇到相同错误但上述解决方案不起作用的人,我解决了我的“启动失败。找不到二进制文件”。通过执行以下操作会出错:只需确保在尝试运行或调试之前构建您的项目(“项目”>“构建全部”)。当我单击调试或运行时,我认为 IDE 会进行构建,但事实并非如此(显然,回想起来)。新手吸取教训。构建后,您应该会在项目的根目录下看到“Binaries”和“Debug”文件夹。

如果重要的话,我使用的是 OS X 10.7.3,尽管我认为我犯的错误是根本性的,并且任何 Eclipse 发行版都会给出相同的错误。

【讨论】:

为什么回想起来很明显? "Build Project" 在尝试运行之前 我同意应该有一个“构建并运行”选项。我发誓一年前有,但现在已经不在了。我还假设“运行”也会编译...【参考方案3】:

在 Mac 上:

    确保您已安装 xcode。通过编写“info g++”对其进行测试,您必须看到有关编译器的正确信息。

    构建您的项目。

    转到您的项目文件夹。您应该在 Debug 或 implementation 文件夹中看到一个可执行文件,具体取决于您的构建配置。如果您 d-click 可执行文件,您应该会在终端上看到结果。

    从运行/运行配置...返回 Ecliipse,然后浏览到您拥有可执行文件的文件夹 - 您已经找到该文件 - 您还可以在该窗口中根据需要更改构建配置。并为每次运行自动构建。

    再次运行它应该可以工作。

祝你好运!

【讨论】:

【参考方案4】:

我遇到了同样的问题,然后我在this site 上找到了解决方案。 让我简单解释一下;

    创建您的 c++ 项目, 查看项目属性(⌘I), 在二进制属性下选择 Mach-O 解析器, 写下您的代码, 不要忘记在运行之前构建您的项目 (⌘B)。

【讨论】:

你应该解释解决方案而不是仅仅给出一个链接。 感谢您的建议。我尽可能简洁地解释了解决方案。【参考方案5】:

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

Invoking: MacOS X C++ Linker g++ -arch i386 -dynamiclib -o "libHelloWorld" ./main.o`

转到项目属性 -> C/C++ Build -> Settings -> Build artifact,然后在第一个下拉列表中选择 Executable

【讨论】:

【参考方案6】:

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

右键单击您的项目并转到属性。导航到 C/C++ Build > Tool Chain Editor 并在 Current toolchain 中选择 MacOSX GCC,然后Apply and Close >.

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

【讨论】:

【参考方案7】:

我遇到了同样的问题。可能很难找到答案,因为“找不到二进制文件”问题之前已经出现过多次,原因和解决方案各不相同(选择 64 位解析器等)。

事实证明,就我而言,解决方法很简单:对于您创建的每个新项目,您只需手动构建一次。之后,照常工作。

详细信息:在 Mac OS 10.7.2 上使用全新安装的 Eclipse Indigo Service Release 1。

【讨论】:

【参考方案8】:

如果您的项目名称包含“.” (点),构建项目时不会生成二进制文件。 从项目名称中删除所有“.”(点)并重建它或尝试创建一个新项目。

编码愉快!

【讨论】:

【参考方案9】:

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

可能的解决方案是添加带有完整路径的新配置到您的二进制输出文件

运行->运行配置...->Main->C++应用程序):

【讨论】:

【参考方案10】:

我通过创建“启动配置”解决了与 Eclipse 类似的问题。我在带有 CDT(C/C++ 开发环境)的 OSX Lion 上使用 Eclipse 的 Indigo 版本。我在 Project->Properties->Run/Debug Settings 中找到了创建新启动配置的选项。

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

【讨论】:

【参考方案11】:

我遇到了同样的问题,即使我已将工件设置为可执行。这是因为共享库设置被勾选了,即使您指定了可执行文件,这也会导致生成 dylib。

【讨论】:

【参考方案12】:

我通过在项目属性对话框中的 C/C++ Build 选项卡上将 Builder Type 设置为 Internal Builder 来运行它.

【讨论】:

【参考方案13】:

无论采用哪种方法来解决您工作区的这个问题,这个问题似乎已经成为我创建的项目的固有问题。既不使用参数也不确保用于链接的 gcc 版本不起作用。我确实找到了一个直观的解决方案。这是:“...二进制文件不可用...”错误。 执行以下操作:(请记住,以下步骤是在您采取上述任一路线之后,但这些都没有解决问题。

1.) 删除所有内容 - 项目和文件。 2.) 创建新项目和源文件

【讨论】:

【参考方案14】:

我有类似的问题,但代码不同。在 File.h 文件中确保

virtual ~Destructor () ; //Don't forget Curly braces 

上面的语句显示了析构函数初始化 () 并用花括号 定义。在我的代码中,我忘记定义析构函数。 希望这会有所帮助

【讨论】:

【参考方案15】:

我遇到了同样的问题,所以我摆弄了一下,发现如果我点击“个人资料”按钮(绿色播放图标,下面有一个小时钟),在“运行”的右侧按钮,我的程序将在我下次单击“运行”按钮时运行。

我实际上不知道那做了什么,但它允许我运行代码。

如果有人知道这有帮助的原因,以及它是否是一个实际的解决方案,请不要犹豫!

【讨论】:

以上是关于OS X Eclipse C++ 启动失败 - 找不到二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

无法运行程序“g++”:启动失败 - Eclipse C++

如何在Mac OS X上面指定Eclipse启动时用指定的某一版本JDK

如何在Mac OS X上面指定Eclipse启动时用指定的某一版本JDK

安装 Mac OS X Yosemite (Mac OS 10.10) 后 Eclipse 无法启动

在 Mac OS X 上使用 Eclipse CDT 调试远程 Linux 应用程序

Eclipse mac osx:启动失败,找不到二进制文件