1

Rで使用するCコードを書いています。Cで行列演算を行うために、「gsl_matrix」ライブラリを追加しました。R CMD SHLIB を使用してコンパイルすると、問題なくコンパイルされます。しかし、R を開いて dyn.load("file.so") を書き込もうとすると、次のエラー メッセージが表示されます。

unable to load shared object file.so
undefined symbol: gsl_matrix_alloc

私の間違いはどこですか?

4

2 に答える 2

2

これは、 R-devel で説明されているように、GSL ライブラリに適切にリンクされていない共有ライブラリに関係していると思われます、またはR 拡張機能の記述に関するマニュアル では、Makevarsファイル (のようなもの)を使用することが推奨されていますPKG_LIBS=-L/usr/lib -lgsl。それ以外の場合は、 の例に従って、次のhelp(SHLIB)ことを試してみてください。

$ R CMD SHLIB file.c -lgsl -lgslcblas

GSL 関数を呼び出すための基本的なセットアップを示す簡単なチュートリアルR Call GSLがあります。

次のように名前を変更したおもちゃの例を再現できnperms.{c,r}ます (Mac では、-dynamiclib代わりにスイッチを使用します-shared)。

~/scratch $ gcc -c nperms.c 
~/scratch $ file nperms.o
nperms.o: Mach-O 64-bit object x86_64
~/scratch $ gcc -dynamiclib -lgsl -lgslcblas -o libnperms.dylib -dylib nperms.o
~/scratch $ ls *nperm*
libnperms.dylib  nperms.c  nperms.o
~/scratch $ file libnperms.dylib 
libnperms.dylib: Mach-O 64-bit dynamically linked shared library x86_64

dyn.loadR で'ingを実行すると、すべて正常に動作します。ただし、それ以上の引数なしでlibnperms.dylib生成された共有ライブラリを使用しますR CMD SHLIB

~/scratch $ R CMD SHLIB nperms.c
gcc -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o nperms.so nperms.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
~/scratch $ ls *nperm*
libnperms.dylib  nperms.c  nperms.o  nperms.r  nperms.so
~/scratch $ file nperms.so
nperms.so: Mach-O 64-bit dynamically linked shared library x86_64

次のエラーが発生します (フランス語のロケールでは申し訳ありません)。

> dyn.load("nperms.so")
Erreur dans dyn.load("nperms.so") : 
  impossible de charger l'objet partag'e '/Users/chl/scratch/nperms.so':
  dlopen(/Users/chl/scratch/nperms.so, 6): Symbol not found: _gsl_permutation_alloc
  Referenced from: /Users/chl/scratch/nperms.so
  Expected in: flat namespace
 in /Users/chl/scratch/nperms.so
于 2012-07-05T17:51:21.057 に答える
0

あなたの質問に対する直接的な回答はありませんが、http ://cran.r-project.org/web/packages/RcppGSL/index.htmlまたはhttp://cran.r-project.org/web/packagesを試しましたか/RcppArmadillo/index.html ?

于 2012-07-05T14:16:51.330 に答える