【问题标题】:GSL library in R - Symbol not foundR中的GSL库-找不到符号
【发布时间】:2016-08-25 19:16:43
【问题描述】:

作为一个新用户,我的 C 知识非常有限,我有一些用 C 编写的代码需要在 R 中使用。我尝试使用“gsl_integration”库。因为代码需要传递给可能没有安装 GSL 库的不同人,所以我创建了我的“integration.h”文件,其中包含“gsl_integration”库中的所有函数和依赖项。我可以使用

编译我的code.c文件
$ R CMD SHLIB code.c

这是我得到的输出

 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  
-I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include
-fPIC  -Wall -mtune=core2 -g -O2  -c code.c -o code.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined
 dynamic_lookup -single_module -multiply_defined suppress 
-L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o code.so code.o 
-F/Library/Frameworks/R.framework/.. 
-framework R -Wl,-framework -Wl,CoreFoundation

当我尝试 dyn.load 在 R 中的“code.so”文件时,我收到以下错误

Error in dyn.load("code.so") : 
  unable to load shared object '/Users/Thodoris/Desktop/Int_C/code.so':
  dlopen(/Users/Thodoris/Desktop/Int_C/code.so, 6): Symbol not found: _gsl_integration_qags
  Referenced from: /Users/Thodoris/Desktop/Int_C/code.so
  Expected in: flat namespace
 in /Users/Thodoris/Desktop/Int_C/code.so

我猜 R 试图找到库的方式有问题吗? 有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: r gsl


    【解决方案1】:

    您没有链接到 GSL。

    您可能想模仿其设置的一个包是我的RcppZiggurat 包,它执行以下操作:

    PKG_LIBS = `$(R_HOME)/bin/Rscript -e "RcppGSL:::LdFlags()"`
    

    即它有一个函数通过调用我的RcppGSL 包来返回正确的库位置,该包在包启动时会学习该位置。

    【讨论】:

    • 感谢您的帮助,我从终端编译时应该包括库位置吗?即 R CMD SHLIB code.c -lib_loc?这是否意味着其他人必须安装 GSL 库,否则它将拥有 code.so 文件所需的一切?
    • 是的,您需要-L...location... -lgsl lgslblas 来添加位置——这可能因计算机、操作系统和操作系统而异,这就是 RcppGSL 通过调用 gsl-config 提供帮助的原因——以及实际图书馆。
    • 谢谢你,德克,它成功了。我在工作目录中添加了一个 Makevars 文件,其中包含“PKG_LIBS=-L/usr/gsl/lib -lgsl -lgslcblas -lm”行
    • 目前适用于您,但不适用于在/usr/gsl 中没有 GSL 的系统。比如我的。它仍然可以工作,因为我碰巧在公共目录中有 GSL。尝试至少调用gsl-config --libs并在configure(可以是一个shell脚本)中测试gsl-config
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多