C++ 编译c++;R中的代码不再工作了

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命令起作用,但当我

我开始说我是编程新手,然后我不确定我是否能够很好地解释我的问题

<>我有一些C++代码,这个代码是由一些R函数加载和使用的。p> 为了编译代码,我使用了以下方法:

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”

应用下一个算法:

  • 检查目录/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2是否仍然存在。我打赌不是
  • 检查您是否仍然拥有丢失的编译器中的libstdc++?通常如果升级相同的编译器和C++标准库ABI不改变,一切都应该继续工作。如果ABI发生了变化,或者你切换标准的C++库和编译器,你将面临大规模系统的重建。
  • 用新的C++标准库和编译器重新编译库和应用程序。

  • 既然它开始工作了,我就可以发布这种情况的答案

    更改编译器和标准库时-请注意,不同的库具有不同的实现和不同的标准支持。更改系统的基础可能需要用新的C++标准库来完全重建系统。 你的图书馆也不例外。因此,如果链接器中出现如下错误:

    警告:找不到选项的目录 “-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2”

    应用下一个算法:

  • 检查目录/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2是否仍然存在。我打赌不是
  • 检查您是否仍然拥有丢失的编译器中的libstdc++?通常如果升级相同的编译器和C++标准库ABI不改变,一切都应该继续工作。如果ABI发生了变化,或者你切换标准的C++库和编译器,你将面临大规模系统的重建。
  • 用新的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 /
    

    这将创建恢复编译所需的内容。

    基于以下有用网站:

    在终端外壳中键入以下内容:

    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重建您的库。这应该可以解决问题。