Jan*_*egg 5 macos dll linker shared-libraries
我正在尝试在 mac 上加载一个框架(或 dylib),我只在运行时知道路径。
Windows解决方案:
在 Mac 上,我可以使用弱链接在库不可用的情况下启动应用程序。但是,一旦需要库中的某些功能,我就会收到“找不到图像”,并且应用程序将中止。
如何在运行时告诉 Mac 动态链接器去哪里寻找库?“dlopen”不起作用,因为它只加载库而不解析符号。将 rpath 设置为“.” (当前目录)并且更改当前目录不起作用。设置典型环境变量 (DYLD_LIBRARY_PATH) 仅在运行可执行文件之前完成,而不是在运行时完成。
还有其他想法吗?
小智 -2
使用 dlopen() 打开库,然后使用 dlsym() 查找符号。如果您依赖动态链接器,则必须提前知道路径并通过 rpath 或环境变量进行设置。rpath 可以采用相对路径,因此这可能对您有用......但最有可能的是, dlopen() 和朋友是这里最好的解决方案(尽管可能需要一些工作才能转换为使用函数指针)。
dlopen() 等的优点是相同(或相似)的代码可以在其他 *nix 上工作。
您还可以查看 NSAddImage(),它是 OSX 特定的,但也应该执行您想要的操作。
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |