首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dyld:试图使用NSTask从Objective运行Fortran可执行文件时未加载的库

dyld:试图使用NSTask从Objective运行Fortran可执行文件时未加载的库
EN

Stack Overflow用户
提问于 2014-05-21 07:51:18
回答 1查看 1.6K关注 0票数 4

这可能有点不寻常,但我有一个用Fortran编写的程序,它接受一些命令行参数并执行模拟。现在,我想添加一个用Xcode编写的GUI来运行可执行文件,并给它一些命令行参数。我使用命令行编译了Fortran程序,然后尝试在Xcode中运行它,如下所示:

代码语言:javascript
复制
   NSString * path = @"path/to/executable";
   NSArray * args = [NSArray arrayWithObjects:@"arg1",@"arg2", nil];

   [NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit];

但是,当我运行它时,我得到:libmkl_intel_lp64.dylib dyld: Library not loaded. Reason: image not found. --库是在我的.profile中设置的,工作/链接在命令行中很好,但是从Xcode中它不起作用。我甚至尝试通过复制.a并编译我的程序来静态地链接它,但没有结果。

根据请求,otool -L的输出:

代码语言:javascript
复制
   lnew-host:$ otool -L /Users/username/Desktop/Simulation/Sim

/Users/username/Desktop/Simulation/Sim:
    libmkl_intel_lp64.dylib (compatibility version 0.0.0, current version 0.0.0)
    libmkl_intel_thread.dylib (compatibility version 0.0.0, current version 0.0.0)
    libmkl_core.dylib (compatibility version 0.0.0, current version 0.0.0)
    libiomp5.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/local/lib/libfgsl.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 08:39:53

该问题涉及用于解决.dylib路径的机制。

当从命令行运行它时,您将通过设置环境变量$DYLD_LIBRARY_PATH来解析路径。

在通过NSTask运行时,您什么也不做(Xcode不会继承您在.profile中设置的环境;实际上,没有使用/usr/bin/open调用的应用程序如何获取其环境相当复杂)。

解决此问题的最佳长期解决方案是使用install_name_tool修复可执行文件中每个英特尔库的位置:

代码语言:javascript
复制
cd /Users/username/Desktop/Simulation
for lib in libmkl_intel_lp64.dylib libmkl_intel_thread.dylib libmkl_core.dylib 
do
    install_name_tool -change $lib /opt/intel/mkl/lib/$lib Sim
done

这种更改是永久性的,意味着不再需要使用$DYLD_LIBRARY_PATH,但是如果您构建了Sim,那么在链接它时就可以做到这一切。

现在,如果您打算在App (甚至Ad发行版)上打包您的GUI以供销售,那么您将需要将这些库打包到应用程序包中,并且您还有更多的工作要做才能做到这一点。但那是另一个故事,不是吗。

一句话:在任何版本的*NIX下使用$LD_LIBRARY_PATH$DYLD_LIBRARY_PATH总是一个坏主意(对于Linux使用/etc/ld.so.conf.d和OSX使用install_name_tool)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23777191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档