Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile
Nach oben zu OS X-Anwendungsentwicklung
In diesem Thema wird das Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile beschrieben. Der Einfachheit halber werden Stapeldateien verwendet.
Tools
Zum Compilieren und Linken werden BCCOSX und XLINK verwendet. Als Speicherort für BCCOSX und XLINK wird C:\Program Files (x86)\Embarcadero\Studio\19.0\bin
(der Standardinstallationspfad) vorausgesetzt.
Anleitungen
- Erstellen Sie ein Verzeichnis ("Arbeitsverzeichnis"). In diesem Verzeichnis müssen die folgenden Operationen ausgeführt werden (außer es ist ein anderes Verzeichnis angegeben).
- Erstellen Sie eine C++-Quelldatei, main.cpp, mit dem folgenden Inhalt:
#include <tchar.h> #include <stdio.h> #include <pthread.h> void *thread_routine(void *arg) { printf("\nThread data pointer: %p", arg); return NULL; } int _tmain(int argc, _TCHAR* argv[]) { pthread_t t; char data[1 << 4]; // 16 bytes int result; result = pthread_create(&t, NULL, thread_routine, data); // create thread // verify result ... // perform concurrent operations result = pthread_join(t, NULL); // wait for thread to complete // verify result ... return 0; }
Dieser Code erstellt einen POSIX-Thread und führt ihn aus.
- Erstellen Sie eine Compiler-Einstellungsdatei, BCCOSX.CFG, mit dem folgenden Inhalt:
--sysroot="C:\SDKs\SDK1" -I"C:\Program Files (x86)\Embarcadero\Studio\19.0\include\osx";"C:\Program Files (x86)\Embarcadero\Studio\19.0\include\osx\crtl";"C:\Program Files (x86)\Embarcadero\Studio\19.0\include\osx\rtl"; -L"C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\osx32\release" --syslib=/usr/lib --sysinc=/usr/include -F/System/Library/Frameworks
Der--sysroot
zugewiesene Pfad stellt das lokale Datei-Cache-Verzeichnis (oder das logische Stammverzeichnis) dar. Hier suchen der Compiler und der Linker nach den OS X-Headern, Bibliotheken und Frameworks. Zum Erstellen dieses Verzeichnisses mit den entsprechenden Unterverzeichnissen und Dateien müssen Sie RAD Studio verwenden:- Erstellen Sie das lokale Verzeichnis
C:\SDKs
. - Überschreiben Sie die Umgebungsvariable
BDSPLATFORMSDKSDIR
mitC:\SDKs
. - Erstellen Sie ein OS X-Verbindungsprofil.
- Aus der Seite Tools > Optionen > Umgebungsoptionen > SDK-Manager:
- Fügen Sie ein OS X SDK Ihrem Entwicklungssystem hinzu, indem das neue Verbindungsprofil verwendet wird.
- Nach dem Auswählen des neuen SDK ändern Sie das Lokale Stammverzeichniss in
C:\SDKs\SDK1
und klicken Sie auf Lokalen Dateizwischenspeicher aktualisieren, um die SDK-Dateien von dem Remote-Computer in einen neuen Speicherort zu übernehmen.
- Erstellen Sie das lokale Verzeichnis
- Erstellen Sie eine Stapeldatei für die Compilierung, compile.bat, mit den folgenden Befehlen:
"C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\bccosx" -c main.cpp
- Erstellen Sie eine Stapeldatei zum Linken, link.bat, mit dem folgenden Inhalt:
"C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\xlink" -Fr"C:\SDKs\SDK1" -Fp"/usr/lib" -Fp"/usr/lib/system" -Fp"/System/Library/Frameworks" -FfAppKit -FfApplicationServices -FfCarbon -FfCoreFoundation -FfCoreServices -FfDiskArbitration -FfFoundation -FfIOKit -FfSecurity -j"C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\osx32\release" -Tme start.o main.o, main ,, libcgcrtl.dylib libcgcrtl_nonshared.a libcgstl.dylib libcgunwind.1.0.dylib libSystem.B.dylib libiconv.dylib ,,
Das logische Stammverzeichnis (
C:\SDKs\SDK1
) wird für XLINK mit der Option-Fr
angegeben.Die OS X-Frameworks werden für XLINK mit der Option
-Ff
angegeben.
- Doppelklicken Sie auf compile.bat, um main.cpp zu compilieren. Wenn die Option
-c
aus der Compiler-Befehlszeile entfernt wird, dann wird der Linker nach der Compilierung aufgerufen (aber die Linker-Optionen müssen mithilfe des Compilers festgelegt werden). Die Compilierung erzeugt die main.o-Objektdatei.
- Doppelklicken Sei auf link.bat, um main.o mit anderen Objektdateien zu linken. Der Link-Prozess erzeugt die ausführbare Datei main.
- Führen Sie main auf einem Mac in einem Verzeichnis aus, das die für XLINK festgelegten dynamischen Bibliotheken enthält: libcgcrtl.dylib, libcgstl.dylib und libcgunwind.1.0.dylib.