Флаги компоновщика для iOS с Xcode

Где я могу найти документацию по флагам компилятора и компоновщика, которые мы можем указать для наших проектов iOS в Xcode?

Настоящая причина, по которой я хочу больше узнать о возможных флагах, в первую очередь заключается в том, что Google Admob SDK говорит, что мы ДОЛЖНЫ устанавливать флаг компоновщика -Objc, тогда как Facebook SDK предлагает НЕ устанавливать его для меньших двоичных файлов. Итак, мне было интересно, можем ли мы установить Objc для определенной библиотеки (в данном случае google admob) и отключить его для другой библиотеки (facebook)? Я ожидал, что смогу найти справочную страницу или какой-либо другой документ о том, что такое параметры компилятора и компоновщика, а затем увеличить Objc. Есть тонны документации и сообщений stackoverflow и т. д. о том, как установить флаги компоновщика в Xcode. Чего не хватает, так это списка возможных флагов компоновщика, которые мы можем установить, и их значения.

Удивительно, но гугление привело меня в замешательство, так как на clang, llvm, llvm-gcc и т. д. и на сайте LLVM перечисляет ряд команд llvm, но я не вижу -Objc в списке ни на одной из соответствующих страниц. Помимо вопроса о том, являются ли компилятор и компоновщик clang или llvm, или как они там называются, есть ли место, куда мы могли бы обратиться, чтобы прочитать документацию о том, что Xcode в настоящее время использует по умолчанию для компиляции и компоновки проектов iOS? (скажем, и Xcode 4.6, и Xcode 5.0.2, если есть разные наборы документов?) Спасибо!


person auspicious99    schedule 31.01.2014    source источник
comment
См. этот ответ - stackoverflow.com /вопросы/6629979/   -  person Ivan Genchev    schedule 31.01.2014
comment
Спасибо, это я тоже видел. Тем не менее, я спрашиваю, есть ли более общая ссылка на то, какие флаги компоновщика доступны и что они означают.   -  person auspicious99    schedule 31.01.2014


Ответы (2)


Вы можете попробовать man 1 ld. В частности, для флага -ObjC описание:

-ObjC Загружает все элементы статических архивных библиотек, которые реализуют класс или категорию Objective-C.

ИЗМЕНИТЬ

Для вашего другого вопроса о AdMob SDK и Facebook SDK я предлагаю добавить -ObjC к флагам компоновщика и взглянуть на эту статью, в которой объясняется, почему. В основном Facebook предлагает не использовать его, потому что ваш исполняемый файл в конечном итоге будет больше из-за дополнительного объектного кода, загруженного в ваш двоичный файл.

person Ivan Genchev    schedule 31.01.2014
comment
@ auspicious99 ... а также man clang для справочной страницы компилятора clang. Будьте осторожны, есть компилятор и вариант компоновщика ObjC - person CouchDeveloper; 31.01.2014
comment
Спасибо Иван! Поскольку я не хочу, чтобы бинарный файл был излишне большим, мне было интересно, могу ли я иметь что-то вроде ObjC, но только для Admob. man 1 ld показывает, что -force_load path_to_archive может быть тем, что я мог бы использовать. Попробую это. - person auspicious99; 31.01.2014
comment
Спасибо @CouchDeveloper! и спасибо, что указали, что у clang есть собственная опция Objc, которая имеет другое значение, чем у ld. - person auspicious99; 31.01.2014
comment
@ auspicious99 -force_load должно работать нормально. Это даже упоминается в вопросах и ответах в моем ответе как обходной путь для статических библиотек, которые содержат только категории, а не классы. - person Ivan Genchev; 31.01.2014

У меня возникла эта проблема, когда я поместил функцию в свой файл .hpp.

void logError(char const* szError)
{
    ...
}

Мне пришлось добавить в строку, чтобы заставить его работать.

inline void logError(char const* szError)
{
    ...
}

Еще лучше не определять свои функции внутри ваших заголовков.

person Leo    schedule 06.12.2017