objective-c如何在linux下进入Modern模式
自從apple的obj-c進入2.0后,出現(xiàn)了相對于Legacy模式的Modern模式;Modern模式中出現(xiàn)了一些高級功能(比如ARC),并且出現(xiàn)了一些新的字面語法,新舊模式的差別可以參考apple官方的:
two Platforms 參考文檔
在linux中(以下均以ubuntu 15.04為例),默認的clang以及gnustep是不支持Modern模式的;需要清楚的是Modern必須由libobjc2以及l(fā)ibgnustep-base.so同時支持才可以實現(xiàn)。
所以我們必須在系統(tǒng)安裝libobjc2和對應的libgnustep-base.so。
實際執(zhí)行中發(fā)現(xiàn)在cmake ..這一步發(fā)生錯誤,錯誤日志如下:
-- The C compiler identification is Clang 3.5.0 -- The CXX compiler identification is Clang 3.5.0 -- Check for working C compiler: /usr/bin/clang -- Check for working C compiler: /usr/bin/clang -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++ -- Check for working CXX compiler: /usr/bin/clang++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- The ASM compiler identification is Clang -- Found assembler: /usr/bin/clang CMake Error at /usr/share/llvm-3.5/cmake/LLVMConfig.cmake:50 (include):include could not find load file: /usr/lib/llvm-3.5/share/llvm/cmake/LLVMExports.cmake Call Stack (most recent call first):CMakeLists.txt:129 (find_package)CMake Error at /usr/share/llvm-3.5/cmake/LLVMConfig.cmake:53 (include):include could not find load file: /usr/lib/llvm-3.5/share/llvm/cmake/LLVM-Config.cmake Call Stack (most recent call first):CMakeLists.txt:129 (find_package)-- Untested version of LLVM (3.5.0) found. -- Disabling LLVM options unless explicitly enabled. -- No C++ runtime library found -- Looking for include file pthread.h -- Looking for include file pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - not found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- GNUstep install type set to LOCAL -- Configuring incomplete, errors occurred! See also "/home/wisy/src/libobjc2/build/CMakeFiles/CMakeOutput.log". See also "/home/wisy/src/libobjc2/build/CMakeFiles/CMakeError.log".不需要到CMakeFiles目錄中去看CMakeError.log,其實出錯原因上面已經(jīng)說的很清楚了,解決辦法卻沒那么簡單,直接做軟鏈接還是會出錯,以下是我的解決辦法:首先下載llvm:
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm然后執(zhí)行cmake:
cd llvm mkdir build cd build cmake ..注意這里后面不需要make,我只要取得cmake生成的一系列*.cmake文件!最終將生成的文件拷貝到指定位置:
cd /usr/lib/llvm-3.5/share/llvm/cmake sudo cp /home/wisy/src/llvm/build/share/llvm/cmake/* .再次進入libobjc2/build執(zhí)行cmake ..,這回沒有錯誤了。
接下來執(zhí)行安裝libobjc2庫:
5.下載libdispatch并安裝:
git clone https://github.com/nickhutchinson/libdispatch.git export CC=clang export CXX=clang++ cd libdispatch ./configure make sudo -E make install sudo ldconfig這時如果用Modern模式編譯objc代碼會出現(xiàn)警告,而且執(zhí)行時也會有警告提示:
clang `gnustep-config --objc-flags` -g0 -O3 -s -fobjc-arc -fobjc-nonfragile-abi -fblocks -lobjc -ldispatch -lgnustep-base -lgnustep-gui `gnustep-config --objc-libs` -o 2 2.mclang: warning: argument unused during compilation: '-shared-libgcc' /usr/bin/ld: warning: libobjc.so.4, needed by /usr/lib/libgnustep-base.so, may conflict with libobjc.so.4.6 /usr/bin/ld: warning: libobjc.so.4, needed by /usr/lib/libgnustep-base.so, may conflict with libobjc.so.4.6 wisy@wisy-X120e:~/src/objc_src$ ./2 Loading two versions of Protocol. The class that will be used is undefined Loading two versions of Object. The class that will be used is undefined 2015-06-11 10:47:20.474 2[21119] (1, hi, 121)因為libgnustep-base.so還在用老版本的libobjc.so庫,所以需要重新編譯鏈接libgnustep-base.so.
6.下載libgnustep-base;這個在configure后,make出錯,鏈接時報大量的符號找不到定義。后來沒辦法,下載gnustep:
svn co http://svn.gna.org/svn/gnustep/modules/core然后進入core/scripts目錄,執(zhí)行:
./compile-all最后在/usr/lib中會出現(xiàn)最新的libgnustep-base.so
如果./compile-all沒有生成.so文件則建議依次到base和gui目錄中去單獨編譯。到這里基本上OK了,可以用以下命令行編譯:
clang `gnustep-config --objc-flags` -g0 -O3 -s -fobjc-arc -fobjc-nonfragile-abi -fblocks -lobjc -ldispatch -lgnustep-base -lgnustep-gui `gnustep-config --objc-libs` -I/usr/include/GNUstep/ -I/usr/local/include/GNUstep/ -o 9 9.m可以參考老外寫的詳細安裝日志,但我具體實現(xiàn)下來貌似一些步驟無法實現(xiàn):
https://feloneouscat.wordpress.com/2013/10/25/objective-c-on-ubuntu-12-04-with-blocks-and-arc/總結(jié)
以上是生活随笔為你收集整理的objective-c如何在linux下进入Modern模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: memcached的基本命令(安装、卸载
- 下一篇: Windows7 连接Windows S