2012-04-25 5 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 ".

Следующие мои файлы .ini ...

odbc.ini

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

odbcinst.ini (я удалил часть полномочий, поскольку это не имеет значения)

[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 

EDIT Добавление дополнительных сведений ...

Th кажутся обеими 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

Я скопировал "libpgicu23.so" в/USR/Lib и решить эту проблему, но мне все еще нужно «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

Я никогда не устанавливал odbc в поле * nix, но мы делали то же самое в окне окна, и он работал нормально. Любой вход оценивается.

ответ

14

Проверить UnixODBC и драйвер те же архитектуры т.е. запустить:

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

Они оба должны быть 32 бит или 64 бит. 64-разрядный unixODBC не может использовать 32-битные драйверы и наоборот.

Вам не нужна эта символическая ссылка.

Запустите ldd on /usr/dlc/odbc/lib/pgoe1023.so, чтобы убедиться, что все зависимости найдены.

Проверить /usr/dlc/odbc/lib/pgoe1023.so выполнимо.

Кстати, я полагаю, что у вас есть ваши метки неправильно, так как ваше содержимое файла odbc.ini должно быть odbcinst.ini и наоборот.

+0

Хорошо, я сделал редактирование на свой вопрос с дополнительной информацией. Это странно, потому что у меня действительно были файлы ini в обратном порядке, однако, когда я их отменяю, ошибка ухудшается (говорит, что он не может найти DSN/Driver). Однако, когда я запускаю ldd, я получаю некоторые недостающие зависимости, поэтому я попытаюсь исправить это, я нашел что-то, что, я думаю, может помочь здесь: http://remidian.com/progress/progress-openedge-database-101b -install-on-centos-rhel.html – PolishHurricane

+0

Обычно не было никакого смысла, что у вас были ini-файлы неправильным образом, но поскольку unixODBC позволяет указать либо драйвер = XXX, где XXX - запись в odbcint.ini ИЛИ Driver = path_to_shared_object, с которым вы справились. Тот факт, что все 32-битное качество, однако, вы потеряли свою зависимость, вы не можете делать то, что вы сделали, и ожидать, что он будет работать. Недопустимый ABI предполагает, что вы установили несовместимый общий объект. Это не так просто. – bohica

2

Одна вещь для проверки - это номера младших версий библиотек unixODBC, с которыми связан драйвер. Начиная с unixODBC 2.3.1 я изменил номер младшего lib на 2, чтобы отразить изменение размера SQLLEN на 64-битных платформах.Однако если драйвер lib был связан с более ранней версией, он будет искать libodbc.so.1, а текущие источники предоставляют libodbc.so.2. Простым решением является предоставление символической ссылки из * .so.1 в * .so.2. То же самое относится и к libodbcinst.so, поэтому также проверьте это.

 Смежные вопросы

  • Нет связанных вопросов^_^