程式語言 - Wine - C/C++ - 開發環境



參考資訊:
https://www.winehq.org/
https://wiki.winehq.org/Winelib_User%27s_Guide

Wine是Windows API層相容,但是並不是Binary層相容,因此,只能將Windows執行檔案(Intel x86/x64),如:notepad.exe,在Linux(Intel x86/64)環境下執行,但是,無法在ARM平台下執行(ARM版本的Wine),因為ARM不認得Intel x86/x64指令,所以無法執行,不過,可以透過模擬器方式執行,例如:使用box86、box64模擬器,然後再搭配Intel x86/64版本的Wine,去執行Windows執行檔案(Intel x86/x64),不過這樣的執行方式就不是原生速度執行,而是使用模擬器方式執行

在Intel x86/x64平台下,Wine除了可以用來跑Windows PE執行檔案(xxx.exe)之外,更可以用來編譯Win32 API程式,而使用的工具則是Winelib,Winelib其實就是Wine的工具、元件庫,工具包含winegcc、wrc等,winegcc是GCC Compiler,用來編譯程式碼,而wrc則是Resouce Compiler,可以用來編譯Resource檔案,所以編譯後的檔案格式是Linux ELF,然後可以透過Wine元件庫,如:gdi32.dll.so、user32.dll.so,執行編譯後的這個Linux ELF檔案,winegcc編譯後的檔案包含xxx.exe、xxx.exe.so兩個檔案,如下 :

$ winegcc main.c -o main.exe
$ file main*
    main.exe:    POSIX shell script, ASCII text executable
    main.exe.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=xxx, not stripped

main.exe是一個Script檔案,用來啟動Wine,而主要程式則是位於main.exe.so

這樣的好處是可以讓Win32 API、Linux API共處一室,可以在程式裡面同時使用Windows元件庫、Linux元件庫,當然,如果將Wine移植到ARM平台,就可以體會Winelib的強大,因為這樣代表可以在ARM平台,以原生速度執行這個編譯後的Win32程式

安裝步驟如下:

$ sudo apt-get install gcc-mingw* wine* -y
$ wine winecfg

DPI設定成144