2012-04-25 8 views
8

저는 ArchLinux를 사용하고 있으며 OpenEdge 진행 드라이버를 설치하려고합니다. 그래서 PHP를 통해 액세스 할 수 있습니다. 나는 인 unixODBC 패키지와 드라이버를 설치했습니다,하지만 난 ISQL 또는 PHP를 통해 연결을 테스트 할 때, 내가 같은 오류가 ...unixodbc 드라이버 관리자가 설치할 때 지정된 라이브러리를 열 수 없습니다.

# 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 

위쪽 엉망 점은 "은/usr/DLC/ODBC입니다 /lib/pgoe1023.so "는 현재 존재하지만, 나는 심지어"/ usr/dlc "과 심볼릭 링크했다. 다음

은 (는 무관하다 나는 자격 증명의 일부를 제거)

[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 

...

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

ODBCINST.INI

ODBC.INI 내 .INI 파일입니다 수정 추가 정보 ...

Th ey은 내가 32 비트가되는 것처럼 보입니다. ,

[[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 

일부 종속성이 빠진 것처럼 않습니다 ...

[[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) 

UPDATE

내가는/usr/lib 디렉토리에 "libpgicu23.so"를 복사하고 그 문제를 해결 하지만 여전히 "libstdC++ - libc6.2-2.so.3"이 필요하지만 인터넷에서 라이브러리를 가져 왔을 때 "공유 라이브러리를로드하는 동안 오류가 발생했습니다 : /usr/lib/libstdc++-libc6.2-2.so. 3 : ELF 파일 OS ABI가 잘못되었습니다. "

실제로 "libstdC++ - libc6.2-2.so.3"에서 "libstdC++. so"로 심볼릭 링크를 만들었지 만 ldd를 통해 문제가 해결되었지만 isql을 쿼리 할 때이 오류가 발생했습니다.

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

* nix 상자에 ODBC를 설치 한 적이 없지만 Windows 상자에서 똑같은 작업을 수행하여 정상적으로 작동합니다. 모든 의견을 감사드립니다.

답변

14

체크 인 unixODBC 및 드라이버 즉 동일한 아키텍처이며, 실행

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

그들은 32 비트 또는 64 비트이어야한다. 64 비트 unixODBC는 32 비트 드라이버를 사용할 수 없으며 반대의 경우도 마찬가지입니다.

심볼릭 링크가 필요하지 않습니다.

/usr/dlc/odbc/lib/pgoe1023.so에서 ldd를 실행하여 모든 종속성이 있는지 확인하십시오.

/usr/dlc/odbc/lib/pgoe1023.so가 실행 가능한지 확인하십시오.

사실 나는 odbc.ini 파일 내용이 odbcinst.ini 여야하고 그 반대도 마찬가지이기 때문에 잘못된 방법으로 레이블을 사용했다고 가정합니다.

+0

좋아요. 내 질문에 대한 추가 정보를 수정했습니다. 사실 내가 역순으로 ini 파일을 가지고 있기 때문에 이상한데 반대로하면 오류가 더 심해집니다 (DSN/드라이버를 찾을 수 없다). 그러나 내가 ldd를 실행할 때, 필자는 몇 가지 빠진 종속성을 얻었으므로이를 해결하려고 노력할 것입니다. 여기서 도움이 될만한 것이 있습니다. http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

일반적으로 ini 파일에 잘못된 방법이 있지만 unixODBC로 드라이버 = XXX를 지정할 수 있으므로 xdb는 odbcint.ini 또는 드라이버의 항목입니다. = path_to_shared_object 당신이 그걸 가지고 도망갔습니다. 사실 모든 것이 32 비트 OS이지만, 당신은 당신의 누락 된 의존성을 되 살릴 수 있습니다. 당신이 한 일을 할 수없고 그것이 작동 할 것이라고 기대할 수 없습니다. ABI invalid는 호환되지 않는 공유 객체를 설치했음을 나타냅니다. 그것만큼 간단하지 않습니다. – bohica

2

확인할 사항 중 하나는 드라이버가 연결된 unixODBC 라이브러리의 부 버전 번호입니다. unixODBC 2.3.1부터 64 비트 플랫폼에서 SQLLEN 크기의 변화를 반영하기 위해 마이너 lib 번호를 2로 변경했습니다.그러나 드라이버 lib가 이전 버전과 링크되어 있으면 libodbc.so.1을 찾고 현재 소스는 libodbc.so.2를 제공합니다. 간단한 해결책은 * .so.1에서 * .so.2로 sym 링크를 제공하는 것입니다. libodbcinst.so도 마찬가지입니다. 또한 확인하십시오.