Я строю свое приложение на 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;
Но я не могу отключить оптимизацию для производственного кода!
Возможный дубликат [Слабая ссылка на iPhone отказывается работать] (http://stackoverflow.com/questions/3002833/weak-linking-on-iphone-refuses-to-work) –
@ Джонатан Гринспан Я перечитываю [ваш ответ на этот вопрос] (http://stackoverflow.com/questions/3002833/weak-linking-on-iphone-refuses-to-work/3002845#3002845) и повторное использование адреса функции, которую я хочу , но, как я сказал в Q, это работает только в том случае, если я устанавливаю оптимизацию компилятора на None. – Richard
И ты пытался с амперсандом? Какой компилятор вы используете, GCC или LLVM? –