Richten Sie eine Objective-C 2.0-Entwicklungsumgebung unter Linux ein

Es ist lange her, dass sich der Trend zu Swift verlagert hat, und die Anzahl der Personen, die sich für Objective-C interessieren, ist in den letzten Jahren zurückgegangen. Hier finden Sie eine Zusammenfassung der Einrichtung einer Objective-C-Entwicklungsumgebung unter Linux.

Es wurde unter Ubuntu 18.04 und 19.10 unter Docker getestet. Wenn Sie den Inhalt von "ENV" und "RUN" in die Docker-Datei extrahieren, funktioniert dies auf dem tatsächlichen Computer.

Wenn Objective-C 1.0 in Ordnung ist ...

Wenn Sie mit dem altmodischen Objective-C 1.0 zufrieden sind, können Sie mit Clang 9 relativ einfach eine Objective-C-Entwicklungsumgebung einrichten, indem Sie ein fertiges Paket installieren, das mit apt verfügbar ist.

Dockerfile


FROM ubuntu:19.10

RUN set -x \
  && apt update \
  && apt upgrade -y \
  && DEBIAN_FRONTEND=noninteractive apt install -y tzdata \
  && apt install -y clang-9 make gobjc-9 gnustep-devel \
  && apt autoremove -y \
  && apt clean \
  && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

# Set alias
RUN echo 'alias clang-objc="clang-9 \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -lgnustep-base -I/usr/lib/gcc/x86_64-linux-gnu/9/include"' > ~/.bashrc

CMD ["/bin/bash"]

Die Essenz ist

$ apt install -y clang-9 make gobjc-9 gnustep-devel

ist. Auch in ~ / .bashrc

alias clang-objc="clang-9 \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -lgnustep-base -I/usr/lib/gcc/x86_64-linux-gnu/9/include"

Es ist definiert als. Auf diese Weise können Sie dies in diesem Docker-Container tun

$ clang-objc -o hoge hoge.m
$ ./hoge

Auf diese Weise können Sie die Objective-C-Quelle hoge.m einfach kompilieren und ausführen.

Wenn Sie die volle Funktionalität von Objective-C 2.0 nutzen möchten ...

Wenn Sie die Funktionen von Modern Objective-C wie z. B. vollständig nutzen möchten, müssen Sie libobjc2 von GNUstep einrichten. Es kann nicht mit apt installiert werden und muss aus dem Quellcode erstellt werden. Das ist ziemlich schwierig. GitHub-Repository von Plaurent war sehr hilfreich. Die Erstellungsprozedur kann wie folgt in einer Docker-Datei zusammengefasst werden.

Dockerfile


FROM ubuntu:19.10

ENV CC clang-9
ENV CXX clang++-9
ENV CXXFLAGS -std=c++11
ENV RUNTIME_VERSION gnustep-2.0
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
ENV LD /usr/bin/ld.gold
ENV LDFLAGS "-fuse-ld=/usr/bin/ld.gold -L/usr/local/lib"

WORKDIR /GNUstep-build

RUN set -x \
  && apt update \
  && apt upgrade -y \
  && apt install -y git sudo clang-9 clang++-9 build-essential wget \
    subversion cmake libffi-dev libxml2-dev \
    libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \
    libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev libxt-dev libxft-dev \
  && apt autoremove -y \
  && apt clean \
  && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

# Build GNUstep make
RUN set -x \
    #
    # Checkout tools-make
    && git clone https://github.com/gnustep/tools-make.git \
    #
    # Build GNUstep make
    && cd tools-make \
    && CC=${CC} ./configure \
            --with-layout=gnustep \
            --disable-importing-config-file \
            --enable-native-objc-exceptions \
            --enable-objc-arc \
            --enable-install-ld-so-conf \
            --with-library-combo=ng-gnu-gnu \
    && make -j8 \
    && sudo -E make install \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    && echo ". /usr/GNUstep/System/Library/Makefiles/GNUstep.sh" >> ~/.bashrc \
    && echo "export RUNTIME_VERSION=gnustep-2.0" >> ~/.bashrc \
    && echo 'export CXXFLAGS="-std=c++11"' >> ~/.bashrc \
    && cd .. \
#
# Build libdispatch
    #
    # Checkout swift-corelibs-libdispatch
    && git clone https://github.com/apple/swift-corelibs-libdispatch \
    && cd swift-corelibs-libdispatch \
    && git checkout swift-5.1.1-RELEASE \
    #
    # Build libdispatch
    && rm -Rf build \
    && mkdir build \
    && cd build \
    && cmake .. \
         -DCMAKE_C_COMPILER=${CC} \
         -DCMAKE_CXX_COMPILER=${CXX} \
         -DCMAKE_BUILD_TYPE=Release \
         -DUSE_GOLD_LINKER=YES \
    && make \
    && sudo -E make install \
    && sudo ldconfig \
    && cd ../.. \
#
# Build libobjc2
    #
    # Checkout libobjc2
    && git clone https://github.com/gnustep/libobjc2.git \
    && cd libobjc2 \
    && git submodule init \
    && git submodule sync \
    && git submodule update \
    #
    # Build libobjc2
    && rm -Rf build \
    && mkdir build \
    && cd build \
    && cmake .. \
         -DCMAKE_C_COMPILER=${CC} \
         -DCMAKE_CXX_COMPILER=${CXX} \
         -DCMAKE_ASM_COMPILER=${CC} \
         -DTESTS=OFF \
    && cmake --build . \
    && sudo -E make install \
    && sudo ldconfig \
    && cd ../.. \
#
# Build GNUstep make second time
    && cd tools-make \
    && CC=${CC} ./configure \
            --with-layout=gnustep \
            --disable-importing-config-file \
            --enable-native-objc-exceptions \
            --enable-objc-arc \
            --enable-install-ld-so-conf \
            --with-library-combo=ng-gnu-gnu \
    && make -j8 \
    && sudo -E make install \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    && cd .. \
#
# Build GNUstep base
    #
    # Checkout libs-base
    && git clone https://github.com/gnustep/libs-base.git \
    #
    # Build GNUstep base
    && cd libs-base \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd .. 

# For GUI programming
#
# Build GNUstep GUI Library
RUN set -x \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    #
    # Checkout libs-gui
    && git clone https://github.com/gnustep/libs-gui.git \
    #
    # Build GNUstep GUI Library
    && cd libs-gui \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd .. \
#
# Build GNUstep GUI Backend
    #
    # Checkout libs-back
    && git clone https://github.com/gnustep/libs-back.git \
    #
    # Build GNUstep GUI Backend
    && cd libs-back \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd ..

WORKDIR /workdir

# Clean build directory
RUN rm -rf /GNUstep-build

# Set alias
RUN echo 'alias clang-objc="\${CC} \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -fobjc-arc -lobjc -ldispatch -lgnustep-base"' >> ~/.bashrc

CMD ["/bin/bash"]

Es war ein langer Build-Vorgang ... Zum Schluss zu ~ / .bashrc

alias clang-objc="\${CC} \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -fobjc-arc -lobjc -ldispatch -lgnustep-base"

Ist also in diesem Docker-Container eingestellt

$ clang-objc -o hoge hoge.m
$ ./hoge

Auf diese Weise können Sie die Objective-C 2.0-Quelle hoge.m einfach kompilieren und ausführen.

Docker-Datei und Satz von Testdateien

Die diesmal erstellte Docker-Datei und die zum Testen bereitgestellten Objective-C-Quellen wurden in das GitHub-Repository hochgeladen.

$ docker run --rm -it -v $(pwd):/workdir doratex/clang9-objc2:latest /bin/bash
# cd test
# ./test_all.sh

Auf diese Weise können Sie verschiedene Objective-C 2.0-Funktionen testen. (Der letzte GUI-Test der Tests funktioniert jedoch nur, wenn er mit dem X Window System-Server verbunden ist.)

Docker-Bild

Das diesmal erstellte Docker-Image wird in Docker Hub Repository hochgeladen.

$ docker pull doratex/clang9-objc2:ubuntu1910

Sie können es verwenden, wenn Sie dies tun.

Recommended Posts

Richten Sie eine Objective-C 2.0-Entwicklungsumgebung unter Linux ein
Richten Sie eine Python-Entwicklungsumgebung auf Marvericks ein
Richten Sie die Python-Umgebung unter CentOS ein
Richten Sie golang mit goenv unter GNU / Linux ein
Richten Sie eine Tornado-Umgebung für Python in Raspbian Jessie ein
Erstellen Sie eine Arch Linux-Umgebung auf Raspai
Richten Sie die TinyGo-Entwicklungsumgebung für VS Code ein
Richten Sie eine Entwicklungsumgebung für die Verarbeitung natürlicher Sprache ein
Richten Sie Docker unter Oracle Linux (7.x) mit Vagrant ein
Erstellen Sie eine Umgebung für MkDocs unter Amazon Linux (versucht)
[Teil 1] Lassen Sie uns einen Micra-Server unter Linux einrichten
Entwicklungsübergreifende Umgebung (Entwicklung von Programmen für Windows unter Linux)
Richten Sie mit Sublime Text 2 eine Python-Entwicklungsumgebung ein
Richten Sie Python 3.4 unter Ubuntu ein
Entwicklung der Django-Umgebung unter Windows 10
Aufbau einer Linux-Umgebung (in einer WSL-Umgebung)
Richten Sie eine Python-Entwicklungsumgebung mit Visual Studio Code ein
Erstellen Sie eine Ubuntu-Python-Entwicklungsumgebung auf der Google Cloud Platform
So richten Sie WSL2 unter Windows 10 ein und erstellen eine Lernumgebung für Linux-Befehle
Ich möchte eine GUI-Entwicklungsumgebung mit Python oder Golang auf dem Mac einrichten
Einrichten von OpenSSH unter Arch Linux
Richten Sie eine Python-Entwicklungsumgebung unter Ubuntu ein
Erstellen Sie eine Linux-Umgebung unter Windows 10
Aufbau einer Python-Entwicklungsumgebung unter macOS
[Linux] Aufbau einer Docker-Umgebung auf Redhat
Installieren Sie die Python-Entwicklungsumgebung unter Windows 10
Führen Sie die Python 3.5.2-Umgebung unter Amazon Linux ein
Führen Sie cron unter Amazon Linux aus (unter Linux eingestellt).
Ich habe versucht, eine Umgebung von MkDocs unter Amazon Linux zu erstellen
Erstellen Sie eine AWS Cloud9-Entwicklungsumgebung auf einer Amazon EC2-Instanz
So richten Sie die Entwicklungsumgebung von ev3dev ein [Windows-Version]
Hinzufügen einer lokalen Entwicklungsumgebung unter MacOS
Ich habe einen Nur-SFTP-Benutzer unter Linux erstellt.
Setzen Sie die Umgebungsvariable PYTHONPATH auf zsh
Erstellen Sie einen NFS-Server unter Arch Linux
Richten Sie Pipenv auf Pycharm in einer Windows-Umgebung ein
Erstellen Sie eine OpenCV3 + python3-Umgebung unter OSX
Setzen Sie unter Ubuntu Linux Tab auf q
Installieren Sie rJava unter Linux in der R3.6-Umgebung.
Erstellen einer Umgebung für "Tello_Video" mit Raspbian
Erstellen einer Umgebung für "Tello_Video" unter Windows
Führen Sie VS Code und Remote Development in die Offline-Umgebung ein, um die Linux-Entwicklung komfortabel zu gestalten
Erstellen einer Umgebung für matplotlib + cartopy auf einem Mac
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
Legen Sie eine feste IP in der Linux-Umgebung fest
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Stellen Sie das Startskript unter Linux ein (RasPi, Edison)
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (3) GVim8.0 und Python3.6
Erstellen Sie mithilfe von Poetry eine OpenCV4-Umgebung auf Raspberry Pi
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Richten Sie mit Samba einen Dateiserver unter Ubuntu 20.04 ein
Erstellen einer Umgebung für "Tello_Video" unter Mac OS X.
Memo zum Erstellen einer Python-Entwicklungsumgebung mit macOS Catalina
Erstellen Sie eine komfortable Python 3 (Anaconda) -Entwicklungsumgebung mit Windows