平台,编译工具,应用程序这三者的关系要搞明白:
1,平台的含义通常有两点:处理器与操作系统,处理器与指令集有关,操作系统关系的库的调用。
2,编译工具,应用程序都是软件,都要在相应的平台上运行
3,编译工具三要素:运行平台,目标平台,源码语言。
4,编译工具是用于把源码生成可方便运行的代码的工具,源码具有自然的平台无关性,源码这种并不是必然的,而是要求编译它的编译工具支持源码所用到特性。
5,编译工具的运行平台,与编译的目标平台可以不一样,这就是交叉编译。交叉编译需要的信息就是目标平台的指令集与库。通常前者内置,后者有可扩展性。指令集的版本与编译工具的版本是相关的,通常有后面相容性,也就是尽可能用最新版的,但也有例外。
6,所谓的挎平台,主要是指:编译工具支持面向多平台的编译。挎平台不是全平台,好在平台经过商业竞争,流行的不是太多。
7,平台差异,在编译工具难以完美解决时,加上处理器性能的进步,就有了虚拟机的解决方案。
因为平台的不断改进中,挎平台编译工具中延生出许多种类。源码(如C)自然的平台无关性,越来越被平台的特殊性所掩盖。从面也发展出了JAVA,Python这样的高编语言,它们结合虚拟机与编译器,平解决挎平台问题。这里就要面向不同平台出不同的虚拟机。
别一种方式,如GNU的解决方式。GNU是一组编译工具,这种工具确定了C与C++写成的代码的标准(是C与C++可写代码集的一个子集)。依这种标准可以被GNU所提供的编译工具编译到目标平台。其解决的方法是面向不同平台出一种编译软件。当然这个编译软件可以含有交叉编译的功能。
二,MinGW与Cygwin
1, Cygwin类似一种带编译软件的虚拟系统,基本上在window2虚出了UNIX。虚拟系统与虚拟有所区别,虚拟系统功能上相当与虚拟机加操作系统,但减少了系统的无用部分,从面提高性能。与它相反的是Wine在LINUX上虚出windowsAPI, wine有很可小问题。
2,更侧重MinGW编译工具的功能,自带了面向不同平台所需要目标库类信息。
3,从能力上说:如果程序只用到C/C++标准库,可以用MinGW 或Cygwin 编译。如果程序还用到了POSIX API,则只能用Cygwin 编译
4从依赖上说:程序经MinGW 编译后可以直接在Windows上面运行。程序经Cygwin 编译后运行,需要依赖安装时附带的cygwin1.dll。
5, MinGW有两windows与LINUX等多种平台下运行的程序包。Cygwin基本上就在windows下玩。
6, MinGW有点类似GNU/win.这与GNU/linux相对应。是GNU的基本编译工具,加平台基本库类工具(主要是头文件)。GNU类工具是NUIX原生的,用到win下MinGW做了,把对LINUX的调用转换成对windows的应用程序接口调用,这种转换是MinGW的优点,这与虚拟类是完全不同的。
7,windows与LINUX下双开发重点关注:mingw-w64。
双平台工具开win7下安装:
1,下地载,mingw-w64-install.exe与msys2-x86_64-20170918.exe下载地址分别是:
http://www.mingw-w64.org/doku.php/download
https://sourceforge.net/projects/msys2/
2,运行安装,在win7下没选好路径就可。
3,自动起动一次msys2,第一次启动后,会比较卡,是在初始化一些东西。
4,用msys2 mingw64-bit.exe做为编译shell入口。优先使用 msys64/mingw64 下的工具;
5,这里有个坑就是msys2有mingw 64的启动项,但它也只是初始化一些变量,并且不会去找window上安装的mingw-w64-。只用把安装的东西,手工复制到msys2空有目录无内容的地方。用快捷方式也可以。
mklink/j mingw64 "D:\GNUtool\mingw64\mingw64"
要改mingw32-make.exe为make.exe
安装的路径不要有空格,也最后不要用特殊字符。我安装到有空格的地方,就在./configure果报/usr/bin/sh找不到的错误。
因为经编译的是比较新的版本的X264,所以要用到nasm。找不到configure报错。网上下一个。放到msys的/usr/bin目录下,名字为nasm.exe.下载的包里有ndisasm.exe这个也需要。否则会报gcc.exe: fatal error: no input files
6,本身mingw 64是可以在win7下用的,但是./configure不能在win7下用。然后很多代码都是用这个东西的,所以只能再安装能模拟LINUX环境的msys2。
用msys2与mingw 64 去编译
1. SDL安装
下载SDL1.2.14,解压到E:/ffmpeg64/SDL-1.2.14目录。
进入SDL-1.2.14目录,依次执行:
./configure --host=x86_64-w64-mingw32
make
make install
(3). x264安装
下载x264,解压到E:/ffmpeg64/x264目录下。
进入x264目录,依次执行:
./configure --host=x86_64-w64-mingw32--enable-shared
make
make install
(4).FFmpeg安装
下载FFmpeg1.2,解压到E:/ffmpeg64/ffmpeg1.2
进入ffmpeg目录,依次执行:
./configure --enable-gpl --enable-libx264--enable-shared --enable-static --arch=x86_64 --extra-cflags='-I/usr/local/include-I/usr/local/cross-tools/x86_64-w64-mingw32/include/SDL' --extra-ldflags='-L/usr/local/lib-L/usr/local/cross-tools/x86_64-w64-mingw32/lib'
make
make install
最后用的路径为实际make install的路径。FFmpeg的configure 有2分钟左右的无反应时间。Make也许要比较长的时间,20上下分钟。
二,正确的安装msys虚拟系统与其上的Mingw-w64. 前面的方法也能编译,但对ffmpeg会报错,错误主要是各用permission, not found之类的。
1, https://sourceforge.net/projects/msys2/
上下载msys2, 然后最好用管理员帐户安装,否则可能会出permission错误。 安装路径中最好也不要有空格。
2, gcc.exe: error: libavcodec/hq_hqa: No such file or directory错误在试了许多方法后,把下面的前一个全部安装会,直接make.而不是mingw32-make 改成的make后成功。
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-i686-toolchain
pacman -S base-devel
pacman -S vim
3,下载ffmpeg第可用mingw-w64编译的软件,mingw-w64主页上有列表,其它的要自已去改编。bunzip2 ffmpeg-3.3.6.tar.bz2 然后tar -xvf ffmpeg-3.3.6.tar解压。可以是不同的盘,最好和编译工具在同一目录下。不同的位置也可以用可出错的可能加大。
4,解压目录中。
./configure --enable-gpl --enable-libx264--enable-shared --enable-static --arch=x86_64 --extra-cflags='-I/usr/local/include-I/usr/local/cross-tools/x86_64-w64-mingw32/include/SDL' --extra-ldflags='-L/usr/local/lib-L/usr/local/cross-tools/x86_64-w64-mingw32/lib'
make
make install
在经这里就完成了
ubuntu安装mingw
sudo apt-get install gcc-mingw-w64-i686g++-mingw-w64-i686 mingw-w64-tools
Msys2升安装软件。在线,pacman –Star
pacman -Q查看已安装的软件包
pacman -S -g查看软件组
pacman -Q -g base-devel查看软件组包含的软件
pacman -Q -l vim查询软件包的内容
pacman -Q -s nettle查询软件所在的包