1

RInside の例を実行して動作させましたが、リンカ オプション「-F/Library/Frameworks/R.framework/.. -framework R」を g++ の最後に手動で追加する必要がありました (Mac Snow Leopard 10.6.8 の場合)。 Xcode 3.x で)。動作しますが、理由はわかりません。これらのオプションが実際に何をするのか、誰にも言えますか? このリストには見つかりませんでした: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

元のコードは次のとおりです。

#include <RInside.h>                    // for the embedded R via RInside

int main(int argc, char *argv[]) 
{
 RInside R(argc, argv);              // create an embedded R instance 
 R["txt"] = "Hello, world!\n";  // assign a char* (string) to 'txt'
 R.parseEvalQ("cat(txt)");           // eval the init string, ignoring any returns
 exit(0);
}

NetBeans で見たリンカ呼び出しを次に示します。

g++ -o dist/Debug/GNU-MacOSX/callingrproject build/Debug/GNU-MacOSX/main.o - L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/ library/Rcpp/lib -L/Library/Frameworks/R.framework/Resources/library/RInside/lib -L/Library/Frameworks/R.framework/Libraries -L/Library/Frameworks/R.framework/Resources/lib - L/Library/Frameworks/R.framework/Resources/library -L/Library/Frameworks/R.framework/Resources/modules -lRcpp -lRInside -lRlapack -lRblas -F/Library/Frameworks/R.framework/.. -framework R

最後の部分は、手動で追加する必要があったものです。それがなければ、次の 2 つのリンケージ エラーが発生しました。

Undefined symbols:
 "_Rf_mkString", referenced from:
   Rcpp::wrap(char const*)in main.o
 "_R_NilValue", referenced from:
   Rcpp::wrap(char const*)in main.o
4

2 に答える 2

1

フレームワークは、多かれ少なかれ、アプリケーションをパッケージ化する Mac の方法です。これらのアプリケーションには、使用したいコード + ヘッダー + ライブラリが含まれている場合があります。この線

-F/Library/Frameworks/R.framework/..

/Library/Frameworks「指定されたフレームワークのフォルダを見てください」と言い、

-framework R

R.framework「「フレームワーク」ディレクトリのセットでフォルダーを探してください」と言います。

-framework R引数は実際には/ではldなくによって処理されることに注意してください。そのため、詳細については を参照してください。一方、引数は/によって処理されます。これらを組み合わせることで、コンパイラとリンカーは必要なヘッダーとライブラリを見つけることができます。gccclangman ld-Fgccclang

特に、Mac では、(デフォルトで)次の場所に/Library/Frameworks/R.framework/Headersあります/Library/Frameworks/R.framework/Libraries。これらは、適切なフレームワーク フラグを設定することによって精査されたディレクトリです。

-F 引数-framework 引数の詳細については、こちらを参照してください。

于 2013-11-14T00:03:00.187 に答える