C++ 编译c++;R中的代码不再工作了
我开始说我是编程新手,然后我不确定我是否能够很好地解释我的问题 <>我有一些C++代码,这个代码是由一些R函数加载和使用的。p> 为了编译代码,我使用了以下方法:C++ 编译c++;R中的代码不再工作了,c++,r,macos,gcc,osx-mavericks,C++,R,Macos,Gcc,Osx Mavericks,我开始说我是编程新手,然后我不确定我是否能够很好地解释我的问题 我有一些C++代码,这个代码是由一些R函数加载和使用的。p> 为了编译代码,我使用了以下方法: R CMD SHLIB MyCode.cpp 我用R加载了这个库 dyn.load("MyCOde.so") 有时我还构建了一个R包,并且我能够将它加载到R中 如果我用mountain lion在Mac上做这些事情,一切都很好,但是现在我换成了小牛,我有一些问题。R CMD SHLIB MyCode.cpp命令起作用,但当我
R CMD SHLIB MyCode.cpp
我用R加载了这个库
dyn.load("MyCOde.so")
有时我还构建了一个R包,并且我能够将它加载到R中
如果我用mountain lion在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
有人能帮我吗?既然它开始起作用,我就可以发布这种情况的答案 更改编译器和标准库时-请注意,不同的库具有不同的实现和不同的标准支持。更改系统的基础可能需要用新的C++标准库来完全重建系统。 你的图书馆也不例外。因此,如果链接器中出现如下错误: 警告:找不到选项的目录 “-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2” 应用下一个算法:
既然它开始工作了,我就可以发布这种情况的答案 更改编译器和标准库时-请注意,不同的库具有不同的实现和不同的标准支持。更改系统的基础可能需要用新的C++标准库来完全重建系统。 你的图书馆也不例外。因此,如果链接器中出现如下错误: 警告:找不到选项的目录 “-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2” 应用下一个算法:
基于以下有用网站: 在终端外壳中键入以下内容:
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 /
这将创建恢复编译所需的内容。基于以下有用网站: 在终端外壳中键入以下内容:
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 /
这将创建恢复编译所需的内容。看起来您从GCC切换到了CLang,但您的MyCOde.so指向了GCC实现。用CLang重建它。你知道你使用哪种编译器吗?当我键入R CMD SHLIB MyCode.cpp时,我会得到CLang++-dynamiclib-Wl,-headerpad\u max\u install\u name。。。。。。。,所以我猜是clangBut您的库指向GCC 4.8.2:ld:warning:directory not found for option'-L/usr/local/lib/GCC/x86_64-apple-darwin13.0.0/4.8.2'用CLang重建您的库。这应该可以解决问题。看起来您从GCC切换到了CLang,但是您的MyCOde.so指向了GCC实现。用CLang重建它。你知道你使用哪种编译器吗?当我键入R CMD SHLIB MyCode.cpp时,我会得到CLang++-dynamiclib-Wl,-headerpad\u max\u install\u name。。。。。。。,所以我猜是clangBut您的库指向GCC 4.8.2:ld:warning:directory not found for option'-L/usr/local/lib/GCC/x86_64-apple-darwin13.0.0/4.8.2'用CLang重建您的库。这应该可以解决问题。