我正在尝试在mac上加载框架(或dylib),我只在运行时知道路径。
Windows解决方案:
在Mac上,我可以使用弱链接来启动应用程序而不使用库。但是,只要需要库中的某些功能,我就会“找不到图像”,并且应用程序将被中止。
如何在运行时告诉Mac动态链接器在哪里查找库? “dlopen”不起作用,因为它只加载库而不解析符号。将rpath设置为“。” (当前目录)并更改当前目录不起作用。设置典型环境变量(DYLD_LIBRARY_PATH)仅在运行可执行文件之前完成,而不是在运行时期间。
还有其他想法吗?
答案 0 :(得分:0)
编写一个在运行时发现路径的包装器脚本或可执行文件,将路径添加到DYLD_LIBRARY_PATH,然后将execve
调用到真正的可执行文件。
答案 1 :(得分:-1)
使用dlopen()打开库,然后使用dlsym()查找符号。如果依赖于动态链接器,则必须事先知道路径并通过rpath或环境变量进行设置。 rpath可以采用相对路径,因此可能对你有用...但最有可能的是,dlopen()和朋友是最好的解决方案(虽然转换为使用函数指针可能需要一些工作)。
dlopen()等的优点是相同(或类似)的代码可用于其他* nix&#39。
您还可以查看NSAddImage(),这是OSX特定的,但也应该做你想要的。