在 Linux 上使用 MinGW 交叉编译 C++ 代码,目标 Windows:发生错误
Cross-compiling C++ code with MinGW on Linux, targetting Windows: error happens
起初,我用 g++(实际上 'fltk-config --compile')编译了以下代码,可执行文件在 Linux 上运行良好。但是当我尝试在 Linux 上使用 'mingw32' 以 Windows 为目标编译代码时,我 运行 出现错误:
#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' 编译时:
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 环境下可以正常运行:
user@computer:~/Documents$ fltk-config --compile 2016_02_06a_1st_Window.cxx
我的灵感来自 。
正如 "Ulrich Eckhardt" 评论的那样,解决方案是修改反引号的使用。最后,下面的 shell 脚本解决了之前的错误:
#! /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"
之前的错误现在已经解决了,但是,我运行进入了新的错误cannot find -lXext which可以看到终端输出:
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
现在我正在尝试解决新错误!
起初,我用 g++(实际上 'fltk-config --compile')编译了以下代码,可执行文件在 Linux 上运行良好。但是当我尝试在 Linux 上使用 'mingw32' 以 Windows 为目标编译代码时,我 运行 出现错误:
#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' 编译时:
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 环境下可以正常运行:
user@computer:~/Documents$ fltk-config --compile 2016_02_06a_1st_Window.cxx
我的灵感来自
正如 "Ulrich Eckhardt" 评论的那样,解决方案是修改反引号的使用。最后,下面的 shell 脚本解决了之前的错误:
#! /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"
之前的错误现在已经解决了,但是,我运行进入了新的错误cannot find -lXext which可以看到终端输出:
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
现在我正在尝试解决新错误!