2010-12-27 2 views
3

Я строю свое приложение на 10.6, но нацеленное на развертывание 10.5. Я хочу использовать Service Management SMJobBless api, когда программа будет работать с 10.6, но я, очевидно, все равно буду использовать привилегированное средство установки при работе на 10.5.Проверка доступности API Runtime (слабое соединение) - неправильное поведение на 10.5

Я слабо ссылаюсь на инфраструктуру управления услугами в своей исполняемой цели. Я попробовал несколько вариантов кода:

if (SMJobBless != NULL) ... 

if (SMJobBless) ... 

bool const /* or non-const */ useBlessAPI = SMJobBless != NULL; 
if (useBlessAPI) ... 

И я даже попытался с помощью compiler flags listed in a similar-seeming question.

В 10.6, printf("%p %d", SMJobBless, SMJobBless != NULL) (правильно) печатает ненулевое значение указателя для SMJobBless и 1 для непустого.

Когда я копирую пакет приложений в 10.5, printf сообщает мне, что SMJobBless 0x0, но (неправильно) печатает 1 для непустого указателя.

Единственный способ, с которым я работал, - отключить все оптимизации и присвоить указатель функции переменной.

Boolean (* const blessAPI) (CFStringRef, CFStringRef, AuthorizationRef, CFErrorRef *) = &SMJobBless; 

Но я не могу отключить оптимизацию для производственного кода!

+0

Возможный дубликат [Слабая ссылка на iPhone отказывается работать] (http://stackoverflow.com/questions/3002833/weak-linking-on-iphone-refuses-to-work) –

+0

@ Джонатан Гринспан Я перечитываю [ваш ответ на этот вопрос] (http://stackoverflow.com/questions/3002833/weak-linking-on-iphone-refuses-to-work/3002845#3002845) и повторное использование адреса функции, которую я хочу , но, как я сказал в Q, это работает только в том случае, если я устанавливаю оптимизацию компилятора на None. – Richard

+0

И ты пытался с амперсандом? Какой компилятор вы используете, GCC или LLVM? –

ответ

2

Попробуйте положить extern Boolean SMJobBless() __attribute__((weak_import)); в свои файлы, использующие эту функцию. Возможно, это не так заметно.

+0

Это работает, но это не обязательно. – Richard

Смежные вопросы