在Linux上与MinGW交叉编译C ++代码,目标是Windows:发生错误 [英] Cross-compiling C++ code with MinGW on Linux, targetting Windows: error happens

查看:303
本文介绍了在Linux上与MinGW交叉编译C ++代码,目标是Windows:发生错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我使用g ++(实际上是 fltk-config --compile)编译了以下代码,并且该可执行文件在Linux上运行良好。但是,当我尝试在针对Windows的Linux上使用 mingw32编译代码时,会遇到错误:

At first, I compiled the following code with g++ (actually 'fltk-config --compile') and the executable works fine on Linux. But when I try to compile the code with 'mingw32' on Linux targeting Windows, I run into errors:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
int main(int argc,char**argv){
    Fl_Window*Fl_Window_Ptr=new Fl_Window(400*1.618,400,"My second window");
    Fl_Window_Ptr->begin();
    Fl_Button*Fl_Button_Ptr=new Fl_Button(10,400-40,30*1.618,30,"Hi, I mean, hello world!");
    Fl_Window_Ptr->end();
    Fl_Window_Ptr->show();
    return Fl::run();
}

当我尝试使用 mingw32进行编译时:

When I try to compile with 'mingw32' like this:

user@computer:~/Documents$ i586-mingw32msvc-g++ 'fltk-config --cxxflags' 2016_02_06a_1st_Window.cxx 'fltk-config --ldflags' -o 2016_02_06a_1st_Window.exe

发生此错误:

i586-mingw32msvc-g++: fltk-config --cxxflags: No such file or directory
i586-mingw32msvc-g++: fltk-config --ldflags: No such file or directory
2016_02_06a_1st_Window.cxx:1:19: error: FL/Fl.H: No such file or directory
2016_02_06a_1st_Window.cxx:2:26: error: FL/Fl_Window.H: No such file or directory
2016_02_06a_1st_Window.cxx:3:26: error: FL/Fl_Button.H: No such file or directory

不过,只需提一下,以下命令很好,并且可执行文件在Linux环境中可以正常工作:

However, just to mention, the following command is fine and executable works in Linux environment:

user@computer:~/Documents$ fltk-config --compile 2016_02_06a_1st_Window.cxx 

我的灵感来自这篇文章

推荐答案

正如 Ulrich Eckhardt所说,解决方案是修改反引号的用法。最后,以下shell脚本解决了先前的错误:

As "Ulrich Eckhardt" commented, the solution is to modify backticks usage. Finally, the following shell script resolved the previous error:

#! /bin/bash
#This script compiles C++ source codes with MinGW32 with FLTK compile/link flags
echo "Getting fltk-config --cxxflags.."
fltk_config_cxxflags=$(fltk-config --cxxflags)
echo "Getting fltk-config --ldflags.."
fltk_config_ldflags=$(fltk-config --ldflags)
#echo $fltk_config_cxxflags
#echo $fltk_config_ldflags
cxx_source="2016_02_06a_1st_Window.cxx"
exe_output="2016_02_06a_1st_Window.exe"
echo "i586-mingw32msvc-g++ $fltk_config_cxxflags $cxx_source $fltk_config_ldflags -o $exe_output"
echo "Compiling and linking.."
i586-mingw32msvc-g++ $fltk_config_cxxflags $cxx_source $fltk_config_ldflags -o $exe_output
echo "End of script"

现在已解决了先前的错误,但是,我遇到了 找不到-lXext 的新错误可以在终端输出中看到:

The previous error is resolved now, however, I run into a new error of cannot find -lXext which can be seen among terminal output:

user@computer:~/Documents$ ./2016_02_07a_script.sh 
Getting fltk-config --cxxflags..
Getting fltk-config --ldflags..
i586-mingw32msvc-g++ -I/usr/local/include -I/usr/local/include/FL/images -I/usr/include/freetype2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT 2016_02_06a_1st_Window.cxx -L/usr/local/lib -lfltk -lXext -lXft -lfontconfig -lpthread -ldl -lm -lX11 -o 2016_02_06a_1st_Window.exe
Compiling and linking..
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status
End of script

现在我正在尝试解决新错误!

Now I'm trying to resolve the new error!

这篇关于在Linux上与MinGW交叉编译C ++代码,目标是Windows:发生错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆