3

我正在使用 XCode 3.2.5 为 Mac OS 10.5+ 编写一个 c++ 命令行工具,其编写方式如下:-

int main()
{
    ...
    if (a == b)
    {
        doWork() // defined in my.dylib
        doOtherWork() // defined in his.dylib
    }
}

但是,即使 a 和 b 不相等,它也会崩溃:-

Lab-Computer-9adf72:tmp labuser$ ./myapp 
dyld: Library not loaded: ./my.dylib
  Referenced from: /private/tmp/./myapp
  Reason: image not found
Trace/BPT trap

有没有办法让应用程序至少在不调用函数时工作?或者让加载只是懒惰地发生?

从多个 dylib 调用了多个这样的函数,因此每个函数检查将是最后的手段,但即使这样也会有所帮助。

4

1 回答 1

4

我想您使用dlopen. 然后,您应该使用dlsym按名称获取符号(函数)的地址。所以你会这样做:

void (*doWork)();
void (*doOtherWork)();

int main() {
    doWork = dlsym(RTLD_DEFAULT, "doWork");
    doOtherWork = dlsym(RTLD_DEFAULT, "doOtherWork");
    if (a == b) {
        if (doWork) doWork();
        if (doOtherwork) doOtherWork();
    }
}

您可以在此处获取更多信息:Mac OS X ABI 动态加载器参考

于 2012-06-11T14:10:04.743 回答