【问题标题】:How to cross compile from windows g++ cygwin to get linux executable file [duplicate]如何从windows g ++ cygwin交叉编译以获取linux可执行文件[重复]
【发布时间】:2011-08-06 03:22:57
【问题描述】:

我在 Windows 系统上有一个更新的 cygwin-full install ,mingw ,codeblocks 。 我有一个基于输入执行 xml 生成的 c++ 程序。

我知道要为 unix 构建一个可执行文件,我们使用 makefile。 makefiles 是典型的项目文件。 因此,我使用插件 cbp2make.exe 来获取 cbp 项目文件的 makefile。我试图在cygwin中执行make。希望得到一个linux可执行文件。但这显然是错误的。

一个典型的测试 c++ 测试程序 test.c 将在 cygwin 中使用 gcc 交叉编译选项进行编译。

g++-linux -o test test.c

这将为我们提供 linux 可执行文件 test,或者如果未指定名称,它将提供 a.out

对于一个没有包含头文件的简单 c++ 程序来说,这一切都很好。

我知道当我们处理包含大量外部库文件的 c++ 文件时,简单的g++ -o ourprojfile.exe ourprojectfile.cpp 不起作用,因此我们需要使用 make 文件。 问题 1:我的假设有误吗?*

问题 2:我们如何设置交叉编译以直接从代码块中获取 linux 可执行文件。


更新:我最后的问题似乎是缺少我认为我包含在主文件中的依赖 cpp 文件。 解决方案是将它们包含在主文件中,或者像这样简单地编写句柄

g++-linux myprog_linux main.cpp first.cpp second.cpp third.cpp 

现在的问题是在我获得 Linux 可执行文件之后。 当我尝试在 linux 机器上运行它时,我得到一个错误

 /usr/local/folder/myfile/my_prog_nix: error while loading shared libraries: 
libstdc++.so.5: cannot open shared object file: No such file or directory

我需要什么样的链接来清除这个?

【问题讨论】:

  • 交叉编译相当棘手和麻烦。由于您只是针对 linux,因此只需安装 linux 并在其上编译会更容易。你也可以只是一个虚拟机来安装 linux。

标签: c++ linux cygwin cross-compiling codeblocks


【解决方案1】:

假设你需要makefile,你错了。任何建筑商都会做。重要的一点是,您必须告诉建造者:

  • 请致电 g++linux 而不是 g++(或 mingw-g++ 或其他任何名称)
  • 设置正确的路径以查找包含和库。编译器将知道在哪里查找它自己附带的系统库,因此您只需要处理您拥有的任何额外内容。

通常,makefile 调用 C 源代码的 CC 和 C++ 源代码的 CXX 中给出的编译器,并将 CFLAGS 和 CXXFLAGS 的内容分别作为附加参数传递。但是您可能只告诉 CodeBlocks(但我从未使用过,所以我不知道)调用不同的编译器并避免所有的 make 业务。

【讨论】:

  • 好的。所以问题在于设置正确的路径来查找包含的库。您可以发布有关如何完成此操作的示例代码吗?如果我们说一个 test.c 文件及其对应的 test.h 文件。
【解决方案2】:

确保在 Cygwin 中安装了 Cygwin 的 GCC 交叉编译器:

http://sourceforge.net/projects/metamod-p/files/

解压到 Cygwin 根目录,然后使用 Cygwin 从 Cygwin 编译: g++-linux 要么 g++-linux-x86_64

【讨论】:

  • 酷!如果它真的有效:-)
  • -1 正如我在帖子中已经提到的,我确实安装了它,这就是我已经编译正常测试文件的方式。您的回答不相关或没有帮助。如果我们对包含头文件的 main.cpp 文件执行此操作,则会在 g++-linux 中给出未声明的类型错误,而在 g++ 中给出未在此范围内声明的类型错误。
【解决方案3】:

为了交叉编译,您必须使用 linux 代码生成器获取(或构建)gcc 的自定义程序集。由于这不是一项简单的任务,因此最好将源代码移动到 linux 机器并在那里进行本地构建。

【讨论】:

    【解决方案4】:

    解压到 Cygwin 根目录,然后使用以下命令从 Cygwin 编译:g++-linux 或 g++-linux-x86_64

    其实你必须重命名/bin/g++-linux-4.1和/bin/gcc-linux-4.1

    【讨论】:

    • 这看起来应该是对现有答案的评论...
    【解决方案5】:

    如果您想从 Windows 构建 UNIX,我认为您使用了错误的编译器。
    mingw-w64 有一个 ubuntu-natty 目标编译器(11.04 和 64 位)和一个 BSD 目标编译器

    如果您想将主机编译为 windows x64,目标编译为这 2 个操作系统,并以 2 种处理器作为目标,您需要 mingw-w64、个人构建、vityan。

    mingw-w64 项目位于 http://sourceforge.net/projects/mingw-w64/(由于 sourceforge.net 上的 mingw-w64 项目正在迁移到 mingw-w64.org,我建议使用 mingw-w64.org)

    https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20NonWin/vityan/

    在下载之前你应该有一个 sourceforge 帐户(你也许可以将 https 更改为 http)。

    cygwin 是移植到 windows 的 UNIX 工具,我认为编译器实际上来自自动构建领域的 mingw-w64。 cygwin 是 Windows 目标。其目的是为开发人员提供一个类 UNIX 的 windows 环境。

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 2021-11-20
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多