私の知るCは非常に新しいユーザーとしては限られています。私はRで使う必要があるCで書かれたコードをいくつか持っています。 "gsl_integration" GSLライブラリがインストールされていない可能性のある人々にコードを渡す必要があるため、 "gsl_integration"ライブラリのすべての関数と依存関係を含む "integration.h"ファイルを作成しました。私はGSLライブラリのR - シンボルが見つかりません
$ R CMD SHLIB code.c
を使用して、私のcode.cファイルをコンパイルすることができるよ、これは私が手にRIに「code.so」ファイルをdyn.loadしようとすると、私は
-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
を取得し、出力されます次のエラー
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 CMD SHLIB code.c -lib_loc?これは、他人がGSLライブラリをインストールしなければならないことを意味するのでしょうか、それとも、code.soファイルに必要なものがすべてあるでしょうか? – Thor6
はい、場所を追加するには '-L ... location ... -lgsl lgslblas'が必要です。これはコンピュータからOS、OSによって異なる場合があります。そのため、RcppGSLが' gsl-config ' - そして実際のライブラリ。 –
ありがとう、ダーク、それは働いた。 "PKG_LIBS = -L/usr/gsl/lib -lgsl -lgslcblas -lm"という行を使って作業ディレクトリにMakevarsファイルを追加しました – Thor6