我开始说我是编程的新手,然后我不确定我是否能够很好地解释我的问题。
我写了一些c ++代码,这些代码被一些R函数加载和使用。
要编译我使用以下代码:
R CMD SHLIB MyCode.cpp
我用
加载了R中的库dyn.load("MyCOde.so")
有时我也建立了一个R包,我可以将它加载到R。
如果我在带有山狮的Mac上做所有这些东西一切都很好,但现在我换了小牛,我有一些问题。 R CMD SHLIB MyCode.cpp
命令有效,但当我使用dyn.load("MyCOde.so")
时,我得到以下文字:
Errore in dyn.load(paste(dir_function, "MyCOde.so", sep = "")) :
unable to load shared object 'MyCOde.so':
dlopen(MyCOde.so, 6): Symbol not found: __ZNSt8ios_base4InitC1Ev
Referenced from: MyCOde.so
Expected in: flat namespace
in MyCOde.so
此外,如果我尝试在R中加载包,我会得到以下
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: library not found for -lquadmath
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [MyCode.so] Error 1
有人可以帮助我吗?
答案 0 :(得分:6)
基于以下网站的有用网站: thecoatlessprofessor
在终端shell中键入:
curl -O http://r.research.att.com/libs/gfortran-4.8.2-darwin13.tar.bz2
sudo tar fvxz gfortran-4.8.2-darwin13.tar.bz2 -C /
这将创建您需要像以前一样继续编译的内容。
答案 1 :(得分:1)
由于它开始工作,我可以发布这种情况的答案。
当您更改编译器和标准库时 - 请注意,不同的库具有不同的实现和不同的标准支持。更改系统的基础可能需要使用新的C ++标准库完全重建系统。
您的图书馆也不例外。因此,如果链接器中的错误如下:
警告:找不到选项的目录 '-L的/ usr /本地/ LIB / GCC / x86_64的-苹果darwin13.0.0 / 4.8.2'
应用下一个算法: