如何从windows g++ cygwin交叉编译得到linux可执行文件



我在windows系统上有一个更新的cygwin-full安装,mingw,代码块。我有一个基于输入执行XML生成的c++程序。

我理解为unix构建一个可执行文件,我们使用makefiles。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文件。

问题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

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

您认为需要makefile是错误的。任何建筑工人都可以。重要的一点是,您必须告诉构建器:

  • 调用g++linux而不是g++(或mingw-g++或任何它调用的)
  • 设置合适的路径来查找包含和库。编译器会知道在哪里查找它自带的系统库,所以你只需要处理任何额外的东西。

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

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

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

untar到Cygwin根目录,然后从Cygwin编译:g++ linux或g++ -linux-x86_64

为了交叉编译,您必须使用linux代码生成器获取(或构建)gcc的自定义程序集。因为这不是一个微不足道的任务,所以最好只是将源代码移到linux机器上并在那里进行本地构建。

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

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

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

如果你想编译你的主机为windows x64,你的目标为这两个操作系统的两种处理器作为目标,你需要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环境

相关内容

  • 没有找到相关文章

最新更新