gpt4 book ai didi

macos - 运行时 API 可用性检查(弱链接)——10.5 上的不正确行为

转载 作者:行者123 更新时间:2023-12-04 09:39:51 24 4
gpt4 key购买 nike

我正在 10.6 上构建我的应用程序,但目标是 10.5 进行部署。当程序在 10.6 上运行时,我想利用服务管理 SMJobBless api,但显然在 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;

但我无法关闭生产代码的优化!

最佳答案

尝试将 extern Boolean SMJobBless() __attribute__((weak_import)); 放入使用该函数的文件中。它可能没有被正确标记为弱。

关于macos - 运行时 API 可用性检查(弱链接)——10.5 上的不正确行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com