介紹
在windows上使用交叉編譯linux目標程序。舉例來說,在windows編譯一個hello.c文件生成hello目標程序,在linux運行hello能夠輸出hello world。 讓大家少走彎路
實現原理
- C語言編譯原理:編譯就是將C語言轉換成機器指令的過程,理論上只有能夠寫出合適的編譯工具,我們就能再windows上編譯任何目標機器的可執行程序。接觸過VxWorks開發的同行一定深有體會。
- 本方案的實現原理就是通過crosstool-ng生成windows到linux的gcc編譯工具,然後使用該工具來編譯linux程序。
- 本方案使用到了cygwin,但是需要注意的是:cygwin僅僅提供了一個類linux的操作環境,並沒有實質性的影響。也就是說你可以不用cygwin,你僅需要你自己編譯的交叉編譯工具或者本方案提供的編譯好的交叉編譯工具就可以實現你想要的效果。甚至可以明確的是:這裏的交叉編譯工具就是可執行程序:i686-unknown-linux-gnu-gcc.exe或者x86_64-unknown-linux-gnu-gcc.exe,以及一些linux上的頭文件(.h)和共享庫(.so,.lib)。
一些概念及參考
- 第一個C語言編譯器是怎樣編寫的?
- Building a linux cross-compile toolchain under Cygwin64 on Windows 我的主體思路都來自這裏,感謝該作者
- 網易: Cygwin鏡像使用幫助
使用說明
讀者請注意,我不推薦大家自己編譯交叉編譯工具,因爲過程很慢並且容易出錯,直接使用我提供的文件將會快速得到你想要的!
- 下載我提供的資源
- 安裝cygwin到C:\cygwin64也就是默認安裝
- 將 除cygwin外的文件拷貝到C:\cygwin64\home${你的用戶名}\work目錄,work需要你新建
- 在cygwin終端cd到該目錄,使用tar xzvf XXX分別解壓4個編譯工具,注意每解壓完一個都需要給文件夾重命名,否則前面解壓的會被覆蓋。
- 將設個編譯器的bin目錄都添加到環境變量path中。例如C:\cygwin64\home${你的用戶名}\work\i686-unknown-linux-gnu-7.2.0
- 解壓gcc-test.zip ,cd 到gcc-test;
- 運行 make,然後你會在build目錄得到linux上可以自行的文件,拷貝到linux機器去執行吧。
資源
x86_64-unknown-linux-gnu-9.2.0.tar.gz
i686-unknown-linux-gnu-9.2.0.tar.gz
x86_64-unknown-linux-gnu-7.2.0.tar.gz
i686-unknown-linux-gnu-7.2.0.tar.gz