日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

objective-c如何在linux下进入Modern模式

發布時間:2025/7/14 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 objective-c如何在linux下进入Modern模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自從apple的obj-c進入2.0后,出現了相對于Legacy模式的Modern模式;Modern模式中出現了一些高級功能(比如ARC),并且出現了一些新的字面語法,新舊模式的差別可以參考apple官方的:
two Platforms 參考文檔

在linux中(以下均以ubuntu 15.04為例),默認的clang以及gnustep是不支持Modern模式的;需要清楚的是Modern必須由libobjc2以及libgnustep-base.so同時支持才可以實現。
所以我們必須在系統安裝libobjc2和對應的libgnustep-base.so。

  • 確保系統處于“全新”狀態,所謂的“全新”是指沒有安裝過任何llvm,clang尤其是gnustep的任何文件。如果以前安裝過的化必須全部清除干凈。/usr/local/lib和/usr/lib中不能殘留任何libgnustep*的庫
  • 先密集安裝所需的庫吧(有些是可選項):
  • sudo apt-get install cmake sudo apt-get install build-essential git subversion ninja sudo apt-get install libffi-dev libxml2-dev libgnutls-dev libicu-dev sudo apt-get install libblocksruntime-dev libkqueue-dev sudo apt-get install libpthread-workqueue-dev autoconf libtool sudo apt-get install curl sudo apt-get install auto-apt sudo apt-get install libjpeg sudo apt-get install libjpeg-dev libtiff-dev libpng12-dev sudo apt-get install libcups2-dev libfreetype6-dev libcairo2-dev sudo apt-get install libxt-dev libgl1-mesa-dev
  • 然后安裝clang和llvm
  • 下載libobjc2(下載地址);編譯命令如下:
  • echo "export CC=clang" >> ~/.bashrc echo "export CXX=clang++" >> ~/.bashrc source ~/.bashrc export CC=clang export CXX=clang++ cd libobjc2 rm -rf build mkdir build cd build cmake .. make debug=no sudo -E make install

    實際執行中發現在cmake ..這一步發生錯誤,錯誤日志如下:

    -- 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,其實出錯原因上面已經說的很清楚了,解決辦法卻沒那么簡單,直接做軟鏈接還是會出錯,以下是我的解決辦法:首先下載llvm:

    svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

    然后執行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執行cmake ..,這回沒有錯誤了。
    接下來執行安裝libobjc2庫:

    make debug=no sudo -E make install

    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代碼會出現警告,而且執行時也會有警告提示:

    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目錄,執行:

    ./compile-all

    最后在/usr/lib中會出現最新的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

    可以參考老外寫的詳細安裝日志,但我具體實現下來貌似一些步驟無法實現:

    https://feloneouscat.wordpress.com/2013/10/25/objective-c-on-ubuntu-12-04-with-blocks-and-arc/

    總結

    以上是生活随笔為你收集整理的objective-c如何在linux下进入Modern模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。