运行MacOS Sierra(10.12.2),我有一个可以从终端成功执行的程序:
~$ /Users/pf/apps/cfm/bin/cfm-id
Usage: cfm-id.exe <spectrum_file> <id> <candidate_file> <num_highest> <ppm_mass_tol> <abs_mass_tol> <prob_thresh_for_prune> <param_filename> <config_filename> <score_type> <apply_postprocessing> <output_filename> <output_msp_or_mgf>
但是,我需要使用system()
命令在R中运行此程序。这样做,我收到以下错误:
> system("/Users/pf/apps/cfm/bin/cfm-id")
dyld: Library not loaded: libFileParsers.1.dylib
Referenced from: /Users/pf31/apps/cfm/bin/cfm-id
Reason: image not found
>
因此,当程序从R中作为系统命令调用时,该程序显然无法找到一些必要的库。
我已在Renviron.site文件中设置环境变量(例如DYLIB_LIBRARY_PATH等),并使用Sys.getenv()
验证这些变量。
一个提示:如果我关闭&#34;无根&#34;使用csrutil disable
的SIP,这个程序(和另一个表现出相同行为的程序)在终端和在R中使用system("/Users/pf/apps/cfm/bin/cfm-id")
都可以正常工作。不幸的是,如果我关闭SIP,这会打破另一个必要的程序,例如它无法在终端或R内正常运行。
另一个提示:如果我使用sudo
从终端运行相同的程序,我会得到与R中system()
调用相同的行为:
$ sudo /Users/pf/apps/cfm/bin/cfm-id
dyld: Library not loaded: libFileParsers.1.dylib
Referenced from: /Users/pf31/apps/cfm/bin/cfm-id
Reason: image not found
Abort trap: 6
奇怪的是程序将以超级用户身份运行失败。我猜测某处的权限存在问题,但我不知道如何将其删除。