Problème avec le chargement du code c compilé dans R x64 avec dyn.load

Je suis récemment passé d’un ordinateur portable 32 bits à un ordinateur de bureau 64 bits (les deux Win7). Je viens de découvrir que je reçois une erreur maintenant lors du chargement de dll à l’aide de dyn.load . Je suppose que c’est une simple erreur et que j’oublie quelque chose.

Par exemple, j’écris cette simple fonction c (foo.c):

 void foo( int *x) {*x = *x + 1;} 

Puis comstackz-le à l’invite de commande:

 R CMD SHLIB foo.c 

Alors en RI 32bit, on peut l’utiliser en R:

 > dyn.load("foo.dll") > .C("foo",as.integer(1)) [[1]] [1] 2 

mais dans 64bit RI obtenir:

 > dyn.load("foo.dll") Error in inDL(x, as.logical(local), as.logical(now), ...) : unable to load shared object 'C:/Users/Sacha/Documents/R/foo.dll': LoadLibrary failure: %1 is not a valid Win32 application. nd. 

Modifier:

Pour référence, R CMD peut être forcé dans une architecture en utilisant --arch 64x :

 R --arch x64 CMD SHLIB foo.c 

En fait, je savais que je commettais une grave erreur 🙂

Je suppose que vous le comstackz sur une cible 32 bits. Vous devez le construire sur votre ordinateur 64 bits avec des outils 64 bits. Vous ne pouvez pas charger une DLL 32 bits dans un processus 64 bits et vice versa.

ce que j’ai fait est de comstackr avec –arch x64 et –arch 32 une fois et de mettre manuellement les fichiers .dll correspondants (portant le même nom) dans des dossiers distincts src-x64 et src-i386 respectivement, ces deux dossiers sont placés sous le même répertoire où se trouve le dossier src.