Ответ 1
Вам нужно включить <objc/message.h>
(вы найдете соответствующие заголовки в /usr/include/objc
) и ссылку на библиотеку objc
(/usr/lib/libobjc.dylib
).
Я хочу импортировать заголовок среды выполнения для использования objc_msgSend, но я получаю:
error: NSObjCRuntime.h: No such file or directory
Должен ли я добавить что-то к пути поиска заголовка?
Вам нужно включить <objc/message.h>
(вы найдете соответствующие заголовки в /usr/include/objc
) и ссылку на библиотеку objc
(/usr/lib/libobjc.dylib
).
#import <Foundation/NSObjCRuntime.h>
работает
но вам, вероятно, понадобится
#import <objc/runtime.h>
upd: поскольку iOS 7 #import <Foundation/NSObjCRuntime.h>
заменен на #import <objc/NSObjCRuntime.h>
, но я рекомендую использовать #import <objc/runtime.h>
в любом случае
При использовании Xcode 6 и более поздних версий вы получите сообщение об ошибке после #include<objc/message.h>
. Это можно решить следующим образом:
#include <objc/message.h>
void foo(void *object) {
typedef void (*send_type)(void *, SEL, int);
send_type func = (send_type)objc_msgSend;
func(object, sel_getUid("foo:"), 5);
}
http://devstreaming.apple.com/videos/wwdc/2014/417xx2zsyyp8zcs/417/417_whats_new_in_llvm.pdf