2012-04-25 11 views
8

Estoy usando ArchLinux y estoy tratando de instalar los controladores de progreso de OpenEdge para que pueda acceder a él a través de PHP. He instalado el paquete unixodbc y los conductores, pero cuando pruebo la conexión con isql o PHP, me sale el mismo error ...el administrador del controlador de unixodbc no puede abrir la biblioteca especificada en la instalación

# isql -3 SUBS2A 
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found 
[ISQL]ERROR: Could not SQLConnect 

Lo desordenado es que "/ usr/DLC/ODBC /lib/pgoe1023.so "actualmente existe, incluso lo vinculé a"/usr/dlc ".

Los siguientes son mis archivos ini ...

odbc.ini

[SUBS2A] 
Description = ODBC Driver for Progress 
Driver = /usr/dlc/odbc/lib/pgoe1023.so 
FileUsage = 1 

odbcinst.ini (He quitado algunas de las credenciales, ya que es irrelevante)

[ODBC-test] 
Description = SUBS2A 
Driver = SUBS2A 
Server = 192.168.1.2 
Port = 4000 
APILevel=1 
ConnectFunctions=YYN 
CPTimeout=60 
DriverODBCVer=03.60 
FileUsage=0 
SQLLevel=0 
UsageCount=1 
ArraySize=50 
DefaultLongDataBuffLen=2048 
DefaultIsolationLevel= READ COMMITTED 
StaticCursorLongColBuffLen=4096 

EDITAR Agregar más información ...

Th Parece que ambos son de 32 bits, excepto que no tengo idea de lo que estoy haciendo con respecto a eso.

[[email protected] etc]# file /usr/bin/isql 
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=0xd1bc16c119       bb5cad6fea9e2a9abc1d06794a2775, stripped 
[[email protected] etc]# file /usr/dlc/odbc/lib/pgoe1023.so 
/usr/dlc/odbc/lib/pgoe1023.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped 

sí parece que le faltan algunas dependencias ...

[[email protected] lib]# ldd pgoe1023.so 
     linux-gate.so.1 => (0xb77c2000) 
     libpthread.so.0 => /lib/libpthread.so.0 (0xb7499000) 
     librt.so.1 => /lib/librt.so.1 (0xb7490000) 
     libpgicu23.so => not found 
     libdl.so.2 => /lib/libdl.so.2 (0xb748b000) 
     libstdc++-libc6.2-2.so.3 => not found 
     libm.so.6 => /lib/libm.so.6 (0xb745e000) 
     libc.so.6 => /lib/libc.so.6 (0xb72bc000) 
     /lib/ld-linux.so.2 (0xb77c3000) 

ACTUALIZACIÓN

copié "libpgicu23.so" a/usr/lib y se resolvió el problema, pero todavía necesito "libstdC++ - libc6.2-2.so.3", pero cuando cogí uno de internet decía "error al cargar bibliotecas compartidas: /usr/lib/libstdc++-libc6.2-2.so. 3: archivo ELF OS ABI no válido "

De hecho, incluso hice un enlace simbólico de "libstdC++ - libc6.2-2.so.3" a "libstdC++. So", pero a pesar de que resolvió el problema a través de ldd, causó este error cuando consulté isql ..

isql: symbol lookup error: /usr/dlc/odbc/lib/pgoe1023.so: undefined symbol: __builtin_vec_new

Nunca he instalado odbc en un cuadro * nix, pero hicimos lo mismo en un cuadro de Windows y funcionó bien. Cualquier entrada apreciada.

Respuesta

14

Comprobar unixODBC y su conductor son la misma arquitectura es decir, corren:

which isql 
file xxx (whatever came back from above) 
file /usr/dlc/odbc/lib/pgoe1023.so 

ambos deberían ser de 32 bits o 64 bits. Un UnixODBC de 64 bits no puede usar controladores de 32 bits y viceversa.

No debería necesitar ese enlace simbólico.

Ejecute ldd en /usr/dlc/odbc/lib/pgoe1023.so para asegurarse de que se encuentran todas las dependencias.

Compruebe /usr/dlc/odbc/lib/pgoe1023.so es ejecutable.

BTW, supongo que tiene sus etiquetas al revés ya que el contenido de su archivo odbc.ini debe ser odbcinst.ini y viceversa.

+0

Bien He hecho una edición de mi pregunta con más información. Es raro porque en realidad tenía los archivos ini en reversa, sin embargo, cuando los cambio, el error empeora (dice que no puede encontrar DSN/Driver). Sin embargo, cuando ejecuto ldd, obtengo algunas dependencias faltantes, así que voy a tratar de solucionarlo, encontré algo que creo que podría ayudar aquí: http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

Por lo general, no tendría sentido que tengas los archivos ini al revés, pero como unixODBC te permite especificar el controlador = XXX, donde XXX es una entrada en odbcint.ini O el controlador = path_to_shared_object saliste con la tuya. El hecho de que todo sea 32 bit os bueno sin embargo, eres la dependencia que te falta, no puedes hacer lo que hiciste y esperar que funcione. El ABI inválido sugiere que ha instalado un objeto compartido incompatible. No es tan simple como eso. – bohica

2

Una cosa para comprobar es los números de versión menores de las libs de unixODBC con las que el controlador está vinculado. Desde unixODBC 2.3.1, cambié el número de lib menor a 2 para reflejar el cambio en el tamaño de SQLLEN en plataformas de 64 bits.Sin embargo, si el lib del controlador se vinculó con una versión anterior, buscará libodbc.so.1 y las fuentes actuales proporcionarán libodbc.so.2. La solución simple es proporcionar un enlace sym desde * .so.1 hasta * .so.2. Lo mismo también es cierto para libodbcinst.so, así que verifique eso también.

Cuestiones relacionadas