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