NLoptr 无法在 Mac 上安装:无法加载共享对象

NLoptr failed to install on Mac: unable to load shared object

我正在尝试在 Mac OS High Sierra 上安装包 nloptr,以便使用许多不错的包,如 lme4,我在 Anaconda 中使用 RStudio,R 3.4。 2.我也安装了NLopt(从NLopt官网下载,不是开发版,我也安装了Xcode命令行工具,但是还是安装不了nloptr,搞定这个

Error: package or namespace load failed for ‘nloptr’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so':
dlopen(/Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so, 6): Symbol not found: _nlopt_add_equality_mconstraint
Referenced from: /Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so
Expected in: flat namespace
in /Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so

我已经在网上搜索了该怎么做,并且确实在/etc/ldpaths文件中将安装NLopt的路径添加到LD_LIBRARY_PATH,但我仍然得到同样的错误。是的,我遇到了与 中相同的问题,但我没有找到可行的解决方案,因为提出该问题的人已自行解决,我不知道他说 "installed as a root"。有人可以帮忙吗?

此外,我在使用 CMake 安装 NLopt 时遇到了类似的问题,这发生在许多不同的函数中:

In file included from f77api.c:103:
./f77funcs.h:57:14: warning: 'nlopt_minimize_constrained' is deprecated
  [-Wdeprecated-declarations]
 *info = nlopt_minimize_constrained((nlopt_algorithm) *algorithm, 
         ^
./nlopt.h:348:35: note: 'nlopt_minimize_constrained' has been explicitly marked
  deprecated here
 int maxeval, double maxtime) NLOPT_DEPRECATED;
                              ^
./nlopt.h:320:43: note: expanded from macro 'NLOPT_DEPRECATED'
#  define NLOPT_DEPRECATED __attribute__((deprecated))
                                      ^

这就是库未加载的原因吗?

顺便说一句,我已经安装并更新了 Rcpp。 Rcpp 在我的电脑上运行。

更新:我将默认的 C 和 C++ 编译器更改为从 R 项目下载的 clang4。我再次尝试安装,但出现了不同的错误:

Error: package or namespace load failed for ‘nloptr’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so':
dlopen(/Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so, 6): Library not loaded: @rpath/libnlopt.0.dylib
Referenced from: /Users/lambda/anaconda3/lib/R/library/nloptr/libs/nloptr.so
Reason: image not found
Error: loading failed

我试图通过 Sys.geteng(DYLD_LIBRARY_PATH = "/usr/local/lib") 告诉 R 库在哪里,但没有成功。根据我从安装中获得的消息,实际上 R 确实知道共享库在哪里,但它就是无法加载它。请帮忙!

没关系,我重新安装了 Anaconda,并安装了独立的 R 和 RStudio(不在 Anaconda 中),这些包都安装成功。也许在 Anaconda 中使用 RStudio 是个坏主意。

编辑:对于那些 运行 遇到类似情况的人:我切换到 Microsoft R Open (MRO),因为我最近处理了很多线性代数。然后,当我尝试在 MRO 中安装 nloptr 时,我收到了类似的错误消息,指出共享库加载失败,因为找不到图像。我重新安装了 CRAN R 3.4.3 并且 nloptr 在那里安装得很好。所以我通过 .libPaths() 找到了 nloptr 在 CRAN R 3.4.3 中的安装位置,将 nloptr 文件夹复制到 MRO 存储包的位置,并使用实用程序 RSwitch 将 R 的默认版本更改为 MRO。然后我在 MRO 中加载 nloptr,安装依赖它的包,并使用这些包;他们工作得很好。我不知道导致错误的 MRO 出了什么问题,但至少这有效。