懒惰加载Dylibs

时间:2012-06-11 14:03:04

标签: c++ xcode

我正在使用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调用多个这样的函数,因此每个函数检查将是最后的手段,但即使这样也会有所帮助。

1 个答案:

答案 0 :(得分:3)

我想你用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 Dynamic Loader Reference