我在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++源)中给出的编译器,并分别将CFLAGS
和CXXFLAGS
的内容作为附加参数传递给它们。但你可能只是告诉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环境