如何構建ObjC語言編譯環境?
除了在線ObjC編譯器,本地環境Windows/Mac/Linux均可以搭建ObjC編譯環境。
- Mac自然不用多說,ObjC是親兒子。
- (WSL Ubuntu 22.04) Ubuntu可以安裝gobjc/gnustep和gnustep-devel構建編譯環境。
sudo apt-get install gobjc gnustep gnustep-devel
注意Clang一樣可以編譯ObjC,但Clang本身不包含ObjC最基本的頭文件和庫,需要單獨下載,需上面的安裝命令完成此環境配置。
編譯方法1:可以使用官方懶人版bash /usr/share/GNUstep/Makefiles/GNUstep.sh并寫一個objc編譯
的makefile,用make命令搞定。
編譯方法2:利用gnustep-config --objc-flags和gnustep-config --objc-libs獲取objc編譯選項,并在編譯時帶入(注意,需額外增加-lgunstep-base)。例如:
gcc demo.m?-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -g -O2 -fconstant-string-class=NSConstantString -I. -I/home/cx/GNUstep/Library/Headers -I/usr/local/include/GNUstep -I/usr/include/GNUstep -shared-libgcc -pthread -fexceptions -rdynamic -L/home/cx/GNUstep/Library/Libraries -L/usr/local/lib -L/usr/lib -lobjc -lm -lgnustep-base?-o demo
如用Clang編譯,會遇到"objc/objc.h file not found"的錯誤,相比上面的GCC命令,需要多加一個頭文件路徑的參數參數:-I/usr/lib/gcc/x86_64-linux-gnu/11/include,當然也可以手動構造軟鏈接sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/11/include/objc /usr/local/include/objc來解決。 - (Windows 10) Windows可以下載gnustep可執行包,和上面Ubuntu的gnustep類似,只不過是Windows版本,自然只支持ObjC 1.0,不支持2.0.
Index of /pub/gnustep/binaries/windows/
GNUSTEP developer guide可參考官方文檔:GNUstep: Documentation,也可以自己組裝編譯命令,例如:
H:\tools\GNUstep\bin\gcc.exe demo.m -I H:/tools/GNUstep/GNUstep/System/Library/Headers -L H:/tools/GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
構建無比簡潔的clang編譯ObjC環境
在編譯ObjC代碼的更簡潔方法有提到,可以用更簡潔的命令行在Ubuntu 22.04下編譯ObjC環境,其實還可以更簡潔,如下我們將構造一個clang-objc軟鏈接,可以直接使用clang-objc demo.m編譯。
- 為了避免和平臺已有clang命令沖突,我們先復制一個clang可執行檔,命名為clang-objc.
sudo cp /usr/lib/llvm-14/bin/clang /usr/lib/llvm-14/bin/clang-objc - 在/usr/bin目錄構造clang-objc的軟鏈接
sudo ln -s /usr/lib/llvm-14/bin/clang-objc /usr/bin/clang-objc - 利用alias命令進一步精簡clang-objc
alias clang-objc='clang-objc -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES
` -lgnustep-base -lobjc -I?/usr/lib/gcc/x86_64-linux-gnu/11/include?-fconstant-string-class=NSConstantString'
OK, 可以用clang-objc demo.m編譯你的文件了。
注意事項
- clang編譯ObjC,依然需要鏈接libobjc,如果有升級軟件gcc,可能出現clang找不到libobjc, 需要在編譯選項中單獨添加鏈接庫路徑,例如:
libobjc位于/usr/lib/gcc/x86_64-linux-gnu/11/libobjc.so
需要增加選項:-L /usr/lib/gcc/x86_64-linux-gnu/11
Windows搭建Swift語言編譯環境
Windows搭建Swift環境非常簡單,從如下地址下載安裝包,安裝完,自動更新Swift的環境變量,打開命令行即可使用swiftc和swift.
- Swift.org - Welcome to Swift.org
若文章對您有幫助,歡迎關注 程序員小迷 。助您在編程路上越走越好!
微風不燥,陽光正好,你就像風一樣經過這里,愿你停留的片刻溫暖舒心。
我是 程序員小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等編程技術的技巧經驗分享),若作品對您有幫助,請關注、分享、點贊、收藏、在看、喜歡,您的支持是我們為您提供幫助的最大動力。