Perl Language
Compilar el módulo sapnwrfc de Perl cpan a partir del código fuente
Buscar..
Introducción
Me gustaría describir los requisitos previos y los pasos de cómo construir el módulo Perl CPAN sapnwrfc con el entorno de Strawberry Perl en Windows 7 x64. Debería funcionar también para todas las versiones posteriores de Windows como 8, 8.1 y 10.
Uso Strawberry Perl 5.24.1.1 de 64 bits, pero también debería funcionar con versiones anteriores.
Me tomó algo de tiempo para tener éxito con varios intentos (instalación de Perl, SAP NW RFC SDK de 32 vs. 64 bits, compilador de MinGW vs. Microsoft C). Así que espero que algunos se beneficien de mis hallazgos.
Observaciones
Instale un paquete actual de Strawberry Perl de 64 bits desde http://strawberryperl.com . En mi caso fue 5.24.1.1.
Descargue la versión actual de SAP NW RFC SDK x64 bit desde https://launchpad.support.sap.com/#/softwarecenter
Puede encontrarlo con la siguiente traza: Paquetes de soporte y parches => Por categoría => Componentes adicionales => SDK SAP NW RFC => SDK 7.20 SAP NW RFC
En mi caso la versión actual era 7.20 PL42 x64.
Extraiga el archivo descargado con sapcar -xvf NWRFC_42-20004568.SAR
C:\nwrfcsdk_x64
el nombre de la carpeta a C:\nwrfcsdk_x64
Cree archivos .def y .a para el compilador / enlazador MinGW con los siguientes comandos en el directorio C: \ nwrfcsdk_x64:
gendef *.dll
dlltool --dllname icuin34.dll --def icuin34.def --output-lib icuin34.a
dlltool --dllname icudt34.dll --def icudt34.def --output-lib icudt34.a
dlltool --dllname icuuc34.dll --def icuuc34.def --output-lib icuuc34.a
dlltool --dllname libsapucum.dll --def libsapucum.def --output-lib libsapucum.a
dlltool --dllname libicudecnumber.dll --def libicudecnumber.def --output-lib libicudecnumber.a
dlltool --dllname sapnwrfc.dll --def sapnwrfc.def --output-lib sapnwrfc.a
En el directorio de direcciones C: \ nwrfcsdk_x64 \ lib deben existir los siguientes archivos:
icudt34.a
icudt34.def
icudt34.dll
icuin34.a
icuin34.def
icuin34.dll
icuuc34.a
icuuc34.def
icuuc34.dll
libicudecnumber.a
libicudecnumber.def
libicudecnumber.dll
libsapucum.a
libsapucum.def
libsapucum.dll
libsapucum.lib
sapdecfICUlib.lib
sapnwrfc.a
sapnwrfc.def
sapnwrfc.dll
sapnwrfc.lib
Inicie el símbolo del sistema con cmd.exe
e inicie el programa cpan
.
Inicie el comando get sapnwrfc
para descargar el módulo Perl sapnwrfc desde CPAN.
Salga del entorno cpan con el comando exit
. Cambie el directorio a C:\Strawberry\cpan\build\sapnwrfc-0.37-0
.
Construye los Makefile (s) con el siguiente comando. Adapte los nombres de las carpetas de acuerdo a su configuración.
perl Makefile.PL --source=C:\nwrfcsdk_x64 --addlibs "C:\nwrfcsdk_x64\lib\sapnwrfc.a C:\nwrfcsdk_x64\lib\libsapucum.a"
Ejecute los comandos dmake
y dmake install
para compilar e instalar el módulo.
Copie los archivos de C:\nwrfcsdk_x64\lib
en C:\Strawberry\perl\site\lib\auto\SAPNW\Connection
.
Ejemplo simple para probar la conexión RFC.
Ejemplo simple de http://search.cpan.org/dist/sapnwrfc/sapnwrfc-cookbook.pod
use strict;
use warnings;
use utf8;
use sapnwrfc;
SAPNW::Rfc->load_config('sap.yml');
my $conn = SAPNW::Rfc->rfc_connect;
my $rd = $conn->function_lookup("RPY_PROGRAM_READ");
my $rc = $rd->create_function_call;
$rc->PROGRAM_NAME("SAPLGRFC");
eval {
$rc->invoke;
};
if ($@) {
die "RFC Error: $@\n";
}
print "Program name: ".$rc->PROG_INF->{'PROGNAME'}."\n";
my $cnt_lines_with_text = scalar grep(/LGRFCUXX/, map { $_->{LINE} } @{$rc->SOURCE_EXTENDED});
$conn->disconnect;