1

R コードで QuantLib の日付関数とカレンダー関数を再利用したいと考えていました。RQuantLib はすべてのカレンダーをカバーしていないため、最新の QuantLib バージョンをコンパイルしてインストールしました。ただし、同様の質問で提供されている例を実行できません。以下の C++ コードを適切にコンパイルして使用するように Rcpp を構成するにはどうすればよいですか?

Rcpp 関数 sourceCpp("myCode.cpp") を使用して、次のコード (ファイル "myCode.cpp" 内) を実行しようとしました。

#include <ql/quantlib.hpp>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::depends(RQuantLib)]]

// [[Rcpp::export]]
double timesTwo(double x) {
  QuantLib::Calendar myCal = QuantLib::UnitedKingdom();
  QuantLib::Date newYearsEve(31, QuantLib::Dec, 2008);
  QuantLib::Rate zc3mQuote = x;
  return zc3mQuote * 2;
}

これにより、次のエラーが発生します。

ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3'
ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sourceCpp_65848.so] Error 1

次のコマンドを使用してコマンドラインでファイル「myCode.cpp」をコンパイルすると、問題なく動作します。

g++ -I/opt/local/include/ -I/opt/local/include/boost \
-I/Library/Frameworks/R.framework/Resources/include -DNDEBUG \
-I/opt/local/include -I/opt/local/include  -I/usr/local/include  \
-I"/Library/Frameworks/R.framework/Versions/3.1/Resources/library/Rcpp/include" \
-I"/Library/Frameworks/R.framework/Versions/3.1/Resources/library/RQuantLib/include"    \
-fPIC  -mtune=core2 -g -O2  -c QuantLibTest2.cpp -o QuantLibTest2.o \
-L/opt/local/lib/ -lQuantLib
4

1 に答える 1

2

CRAN ソースを使用しましたか、それとも GitHub にあるものを使用しましたか?

セットアップの「Windows 以外」ブランチには、いくつかの作業が必要なようです。それは現在

## on Linux and OS X, see if we have quantlib-config which may well be
## false in the case of prebuild binary packages as eg r-cran-rquantlib
## on Debian / Ubuntu as well as the OS X package from CRAN
qc <- system("bash -c 'type -p quantlib-config'", ignore.stderr=TRUE, intern=TRUE)
if (is.character(qc) && nchar(qc) > 1) {
    qlcflags <- system(paste(qc, "--cflags"), intern = TRUE)
    qllibs   <- system(paste(qc, "--libs"),   intern = TRUE)
}

quantlib-configPATH にあり、正しい値を返しますか?

ここ数日で、あなたがやりたいこと (Rcpp プラグイン経由で RQuantLib を使用する) のサポートを有効化/拡張したので、現在の GitHub ソースを試してみてください。Linux では問題なく動作しますが、テストする OS X システムがありません。

編集:答えを受け入れてくれてありがとう。完全を期すために、元のコード、GitHub ソースの RQuantLib を使用して、私のボックスでそのまま動作します。

R> system("cat /tmp/rql.cpp") 

#include <ql/quantlib.hpp>
#include <Rcpp.h> 

using namespace Rcpp;

// [[Rcpp::depends(RQuantLib)]]

// [[Rcpp::export]]
double timesTwo(double x) {
  QuantLib::Calendar myCal = QuantLib::UnitedKingdom();
  QuantLib::Date newYearsEve(31, QuantLib::Dec, 2008);
  QuantLib::Rate zc3mQuote = x;
  return zc3mQuote * 2;
}
R> sourceCpp("/tmp/rql.cpp")     # takes a few seconds
R> timesTwo(21)
[1] 42
R> 
于 2014-10-27T15:29:22.410 に答える