2

Python が埋め込まれた R 拡張機能を構築しています。

Pythonが必要なエンコーディングを見つけることができないことを除いて、すべてがうまくいきます。「big5」に関係することをすると、LookupError がスローされ続けます。ただし、スタンドアロンの C++ アプリケーションをビルドすると、Python インタープリターはエンコーディングを検出し、エラーのスローを停止します。

test.cppc の通常のスタンドアローンの例:

#include <Python.h>

int main(int argc, char* argv[]) {
  Py_SetProgramName("test");  /* optional but recommended */
    Py_Initialize();
    PyRun_SimpleString(
            "import codecs\n"
            "f = codecs.open('big5_encoded_file', encoding='big5', mode='r')"
            );
    Py_Finalize();
    return 0;
}

testr.cppR 拡張の場合:

#include <R.h>
#include <Rdefines.h>
#include <Python.h>

extern "C" SEXP testpy();

SEXP testpy() {
  Py_SetProgramName("test");  /* optional but recommended */
    Py_Initialize();
    PyRun_SimpleString(
            "import codecs\n"
            "f = codecs.open('big5_encoded_file', encoding='big5', mode='r')"
            );
    Py_Finalize();
    return R_NilValue;
}

MakefileUbuntu 12.10の場合:

all: test testr.so

test: test.cpp
  g++ test.cpp -o test -I/usr/include/python2.7 -lpython2.7


testr.so: testr.cpp
    R CMD SHLIB testr.cpp

./test正常に実行されますがRscript -e "dyn.load('testr.so');.Call('testpy')"、「LookupError: unknown encoding: big5」が生成されます

ありがとう

- 編集 -

をビルドするには、次のようtestr.soに設定してください。

export PKG_CXXFLAGS=-I/usr/include/python2.7
export PKG_LIBS=-lpython2.7
4

1 に答える 1

0

リンクの問題であることに気づきました。

import encodings.big5埋め込まれたPythonで試してみましたが、のエラーがundefined reference発生しました。http://bugs.python.org/issue4434の解決策は私のために働きます:

PyInitialize()電話する前にdlopen("libpython2.7.so", RTLD_LAZY | RTLD_GLOBAL);

于 2013-03-02T16:33:09.587 に答える