如何在 Netbeans 中创建跨平台 C++ 应用程序?

Posted

技术标签:

【中文标题】如何在 Netbeans 中创建跨平台 C++ 应用程序?【英文标题】:How to create a cross-platform C++ application in Netbeans? 【发布时间】:2014-12-08 02:26:35 【问题描述】:

我在为 Linux 和 Windows 操作系统在 Netbeans 8.0.1 中创建一个简单的“Hello world”跨平台 C++ 应用程序时遇到了一些困难。我发现很少有适用于 Windows 的说明,而没有适用于 Linux 的说明(我的操作系统是 Ubuntu 14.04)。

我在 Internet 上进行的研究使我得出一个结论,即应该为 Windows 操作系统再创建一个 makefile。通常,在创建 C++ 项目时,Netbeans 会建议我们为我们创建一个 makefile。它很棒,但它只适用于 Linux。

我坚持创建 Makefile(以前从未手动完成此操作),所以这些是我为 Windows 创建 makefile 的步骤:

    右键项目->新建->生成文件 文件名:“Makefile-Windows”-> 下一步 编译器:GNU 编译器,平台:Windows -> 下一步 基础目录:项目目录 -> 下一步 目标名称:hello-world(“可执行”单选按钮)-> 添加-> 下一步 所有创建文件的目录:GNU-amd64-Windows -> 下一步 输入源文件:main.cpp -> 下一步 搜索包含文件的目录:留空 -> 下一步 选择要链接的库:无,链接模式:动态链接 -> 下一步 要链接的库:留空 -> 下一步 您希望如何构建您的代码?:Dev.模式 -> 下一步 ,13.编译器选项:左默认->完成

因此,在我的 GNU-amd64-Windows 文件夹中制作这个新鲜出炉的 makefile 后,会出现一个目标文件 (main.o) 和一个可执行文件 (hello-world),但仍然只能在 Linux 中执行。当我尝试在 Windows 命令行中运行它时,出现错误:

“错误的命令或文件名”

以防万一这是我的 main.cpp 内容:

#include <iostream>
int main( int argc, char** argv )

    std::cout << "Hello world" << std::endl;
    return 0;

如果我选择了错误的方式,那该怎么做呢?

【问题讨论】:

撇开工具链/工具包的差异不谈,您无法构建一个可在 Linux 和 Windows 上运行的本机可执行文件;您必须为您打算定位的每个平台编译一次。 C++代码可以跨平台,可执行文件不能。 【参考方案1】:

正如 Borgleader 所说,只有 C++ 代码可以跨平台。这是我的解决方案:

    首先,我们不应该使用 Linux GCC 编译器来编译 Windows 应用程序。这就是为什么我们需要为 Linux 安装 Windows 编译器:

    sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
    

    其次,在创建 makefile 时,我们应该指定替代编译器。使用:

    /usr/bin/i586-mingw32msvc-g++
    

    恢复默认:

    g++
    

    最后,在制作完这个 makefile 之后,我们的输出文件就可以在 Windows 平台上执行了。

【讨论】:

我完全不同意这一点。如果您想在 Windows 上支持 linux 应用程序,请在 Windows 上使用 Cygwin 终端重新编译源代码。然后它将成为 Windows 二进制文件。这在大多数情况下都有效。或者使用宏来确定正在使用的编译器并编译适当的平台相关代码。这样它就可以在两个系统上编译。

以上是关于如何在 Netbeans 中创建跨平台 C++ 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 和 Netbeans 中创建 Qt 项目

更改 C++ netbeans 项目中的主文件

如何在 NetBeans 中创建我的项目的 war 文件?

如何在 Netbeans 中创建 Java 项目,而不使用 Maven 作为默认值?

无法在 Netbeans 8.2 中创建 Maven Web 项目

使用 NetBeans IDE 在 Java DB 中创建自动增量键