Kompilieren von C-Code, der sowohl R als auch numpy unter Linux verwendet

8

Ich habe einen C-Code, der sowohl numpy als auch R verwendet. Unter Windows kompiliert er mit MSVC zu einer .dll, die dynamisch von R geladen werden kann und alle Tests besteht. Allerdings schaffe ich es nicht, dass es mit Debian funktioniert.

Um das Problem zu untersuchen, habe ich folgendes minimalistisches Beispiel erstellt:

%Vor%

Ich kann es mit kompilieren

%Vor%

Dabei wurde Rdll.lib von %R_HOME%\bin\x64\R.dll mit erstellt

%Vor%

Dann kann es von R verwendet werden:

%Vor%

Wenn ich es jedoch auf Debian mit kompiliere

%Vor%

und importieren Sie es von R das folgende passiert:

%Vor%

Es erzeugt Segmentierungsfehler, es sei denn, alles, was mit numpy zu tun hat, wird auskommentiert. Die Interaktion mit reinem Python von R scheint in Ordnung zu sein. Aber sobald import_array() aufgerufen wird, gibt es einen segfault. Ich habe -I/usr/share/pyshared/numpy/core/include/ aus Verzweiflung hinzugefügt und es hat nichts verändert.

Schließlich, wenn ich den folgenden Code kompiliere (ähnlich dem vorherigen, aber etwas geändert)

%Vor%

auf dem gleichen Debian-Rechner mit

%Vor%

und rufe es mit

%Vor%

es stürzt plötzlich nicht ab, funktioniert gut und produziert "Hallo, 2 Welten", wie erwartet.

Die Versionen sind: Windows: Compiler Version 19.00.23506 für x64, Python 3.4.4, numpy 1.9.3, R 3.2.0 Debian: gcc Version 4.4.5 (Ziel: x68_64-linux-gnu), Python 2.6.6, numpy 1.4.1, R 3.2.1

Was mache ich falsch?

Update: Getestet auf Ubuntu mit Python 3.2 und Python 2.7 mit gcc und clang. Das Problem besteht weiterhin.

    
zabolekar 10.02.2016, 17:14
quelle

1 Antwort

0

Eine Lösung, die funktioniert (sowohl mit diesem Beispiel als auch mit dem echten Code) ist das Laden von libpythonX.Y.so mit dlopen:

%Vor%

Ich verstehe jedoch nicht, warum es notwendig ist.

    
zabolekar 12.02.2016, 12:49
quelle

Tags und Links