-2

私が話しているソフトウェアには5つのファイルが含まれており、次のように「完全に正常に」コンパイルされopenSUSE 11.3ますgcc-4.5.1

同じソフトウェアで、で次のエラーが表示さWindows XPMingw (gcc-4.6.3)ます。

アップデート

問題が発見されました。

問題はRの関数にありますparseEval。2つの類似した機能があります:parseEvalparseEvalQ。前者は値を返し、もう一方はvoidを返します。

私はparseEvalC++とQtプロジェクトで使用しましたが、Linuxでは非常に正常に動作し、Windowsでは上記のエラーがスローされます。

再現可能な例を次に示します。

demo.cpp

#include <iostream>
#include <RInside.h>
#include <Rcpp.h>

RInside R (0, NULL);
RInside & qtToR (R);

int main ()
{
    int numberOne = 1;
    int numberTwo = 2;

    qtToR ["numberOne"] = numberOne;
    qtToR ["numberTwo"] = numberTwo;

    R.parseEvalQ ("sum = numberOne + numberTwo;");

    int returnValue = R.parseEval ("sum");
    std :: cout << "\n" << returnValue << "\n";
}

対応する.proファイル:

TEMPLATE    = app
TARGET      =
DEPENDPATH  += .

SOURCES     += demo.cpp

INCLUDEPATH += .
INCLUDEPATH += c:/R-2.15.1/include
INCLUDEPATH += c:/R-2.15.1/library/Rcpp/include
INCLUDEPATH += c:/R-2.15.1/library/RInside/include

LIBS        += -Lc:/R-2.15.1/bin/i386 -lR
LIBS        += -Lc:/R-2.15.1/library/Rcpp/libs/i386 -lRcpp
LIBS        += -Lc:/R-2.15.1/library/RInside/libs/i386 -lRInside

# You'll keep pulling your hair if you miss this statement when you are on windows.
CONFIG      += console

ここに画像の説明を入力してください

4

2 に答える 2

1

リンクのセマンティクスは、LinuxとWindowsで異なり、特にダイナミックライブラリでは異なります。

Levineのリンカーとローダーの本を読むことをお勧めします。

この質問も参照して、 Gcc関数の属性dllexportを探してくださいdllimport

Qtでは、 Q_DECL_EXPORTなどを使用する必要がある場合があります(このQtマクロはLinuxとWindowsの両方で機能します)。

于 2012-11-07T08:59:29.283 に答える
0

私は言った:

これは解決されました。問題は.proファイルに関連しておらず、parseEval関数の構文に関連していた。LinuxにあるRInsideは、WindowsにあるRInsideよりも古いです。インストールされているRcppのバージョンも、私のLinuxシステムとWindowsシステムで異なります。

この構文parseEval- int returnValue = R.parseEval ("sum"); は、古いRInsideを使用するLinuxでは正常に機能しますが、新しいRInsideを使用するWindowsでは失敗します。

そこで、上記のコードを次のように変更すると、上記の.proファイルで正常にコンパイルされました。

SEXP ans; int returnValue = R.parseEval ("sum", ans);

これは正常にコンパイルされましたが、私の恐ろしいことに、この喜びは嵐の前の静けさでした!
同じエラーが実行時にシフトしました!

したがって、このエラーの永続的な解決策は、.proファイルを編集し、RInsideの後にRcppをリンクすることです

LIBS += -Lc:/R-2.15.1/library/RInside/libs/i386 -lRInside
LIBS += -Lc:/R-2.15.1/library/Rcpp/libs/i386 -lRcpp

于 2012-12-13T09:09:51.970 に答える