Связывание с библиотеками какао с помощью CMake (C ++, смешанный с Objective-C) - PullRequest
2 голосов
/ 20 октября 2011

Я работаю над добавлением кросс-платформенной поддержки буфера обмена в мой графический интерфейс.Мне удалось заставить его хорошо работать на Windows, теперь я работаю в OSX.

Я получил функции, работающие так, как я хочу, но файл .mm.Поэтому, когда люди компилируют версию моего графического интерфейса для OSX, им теперь нужно связываться с библиотекой какао.

У кого-нибудь есть опыт работы с ссылками на какао при использовании cmake и смешивании c ++ с target-c?

Спасибо

1 Ответ

3 голосов
/ 20 октября 2011

Существуют некоторые ключи компилятора, которые вы передаете в gcc или в clang, чтобы включить компиляцию приложений Objective C или Objective C ++:

gcc -ObjC MySourceFile.m 
gcc -ObjC++ MySourceFile.mm

clang -ObjC MySourceFile.m 
clang -ObjC++ MySourceFile.mm

Вы указываете, какая минимальная версия MacOSX может запускать ваше приложениесо следующей опцией:

gcc -ObjC++ -mmacosx-version-min=10.6

Укажите 10.6, если вы хотите, чтобы ваше приложение было совместимо со Snow Leopard.Вам также нужно передать параметр sysroot в gcc или clang, чтобы сообщить им, с какой версией SDK компилироваться:

gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk

Игрушка задает архитектуру для сборки с параметром arch

gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64

Если вы вызываете компоновщик ld отдельно, вам нужно передать опцию sysrootlib в ld.Для создания динамически связанной библиотеки вы передаете опцию dylib ld.Это передается ld, если вы передаете dynamiclib в gcc или clang.

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64

Чтобы связать с Cocoa Frameworks, вы передаете опцию framework в качестве опции компоновщика для gcc и имени фреймворка:

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -Wl,-framework,Cocoa

Если вы используете стандартную библиотеку C ++, вам нужно будет указать это как параметр компоновщика с помощью

-Wl,stdc++

При развертывании в MacOSX 10.7 и компиляции с помощью clang вы можете использовать стандартную библиотеку libc ++ C ++.Вы передаете опцию компилятору и компоновщику:

-stdlib=libc++ -Wl,c++ 

Таким образом, чтобы создать библиотеку из вашего источника, которая связана с платформой Cocoa, вы должны сделать следующее, используя gcc

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -o MyLibrary.dylib -Wl,-framework,Cocoa MySourceFile.mm

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...