【发布时间】:2014-08-10 00:12:43
【问题描述】:
我开始说我是编程新手,然后我不确定我能否很好地解释我的问题。
我编写了一些 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
有人可以帮助我吗?
【问题讨论】:
-
看起来您从 GCC 切换到 CLang,但您的 MyCOde.so 指向 GCC 实现。用 CLang 重建它。
-
你知道你用的是哪个编译器吗?
-
当我输入 R CMD SHLIB MyCode.cpp 我得到 clang++ -dynamiclib -Wl,-headerpad_max_install_names.......,所以我猜是 clang
-
但是您的库指向 GCC 4.8.2:ld:警告:找不到选项 '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8 的目录。 2' 用 CLang 重建你的库。这应该可以解决问题。
标签: c++ r macos gcc osx-mavericks