Napisany przez: Tomplus 8.09.2021, 20:26:05
Dzisiaj mam problem z połączeniem się z bazą ODBC dla sterownika MacroBase (zna ktoś?)
Samo odbc na systemie przebiegło poprawnie, bo widać do po ustawieniach w plikach odbc.ini i odbcinst.ini jednakże gdy wykonuje testowe polecenie:
isql -v -k "DRIVER={Macrobase};SERVER=localhost;UID=adm;PWD=xyz"
otrzymuję komunikat:
Kod
[unixODBC][Driver Manager] Can't open lib '/usr/lib/libmodbc.so' : file not found
[ISQL] ERROR: Could not SQLConnect
sprawdzając pliki np. poleceniem:
file /usr/libmodbc.so to mam informację np. że jest to plik 32 bitowy.
prawa dostępu do pliku: root 444 (wcześniej 777)
Napisany przez: Pyton_000 9.09.2021, 07:36:02
Sprawdzałeś to: ? https://stackoverflow.com/questions/34624113/unixodbcdriver-managercant-open-lib-usr-lib-libmyodbc-so-file-not-foun
Napisany przez: Tomplus 9.09.2021, 08:19:41
Niestety ale to nie było moje rozwiązanie,
zgłosił problem gdzie plik biblioteki miał w innej lokacji niż ścieżka w ustawieniach, ja mam dokładnie to samo co w ustawieniach.
Skorzystałem za to z rady drugiej:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
niestety bez efektu.
Swoją drogą, na Stackoeverflow szukałem rozwiązania dużo wcześniej, zanim rozpocząłem wątek tutaj na forum.
Napisany przez: Pyton_000 9.09.2021, 08:44:05
A pokaż co zwraca `/usr/lib/libmodbc.so`
Napisany przez: Tomplus 9.09.2021, 09:10:17
Wrzucę bardziej kompleksowe informacje, pracuję na Debian/WSL2.
Kod
root@admin:/# ls -lah /etc/odbc
total 3.7M
drwxr-xr-x 2 root root 4.0K Sep 8 15:04 .
drwxr-xr-x 68 root root 4.0K Sep 8 15:02 ..
-rwxrwxrwx 1 tom tom 1.3K Sep 8 13:54 as_dsn.ini
-rwxrwxrwx 1 tom tom 896 Sep 3 10:53 dsn.ini
-rwxrwxrwx 1 tom tom 4.7K Sep 3 10:18 install_driver.sh
-rwxrwxrwx 1 tom tom 4.7K Sep 3 10:18 install_driver64.sh
-rwxrwxrwx 1 tom tom 4.8K Sep 3 10:18 install_driver64_legacy.sh
-rwxrwxrwx 1 tom tom 4.8K Sep 3 10:18 install_dsn.sh
-rwxrwxrwx 1 tom tom 568K Sep 8 15:03 libmodbc.so
-rwxrwxrwx 1 tom tom 639K Sep 8 15:04 libmodbc64.so
-rwxrwxrwx 1 tom tom 640K Sep 8 15:04 libmodbc64_legacy.so
-r--r--r-- 1 root root 568K Sep 8 13:16 libodbc.so
-r--r--r-- 1 root root 639K Sep 8 13:17 libodbc64.so
-r--r--r-- 1 root root 640K Sep 8 13:17 libodbc_legacy.so
lrwxrwxrwx 1 root root 13 Sep 8 14:05 odbc.ini -> /etc/odbc.ini
lrwxrwxrwx 1 root root 17 Sep 8 14:05 odbcinst.ini -> /etc/odbcinst.ini
-rwxrwxrwx 1 tom tom 2.1K Sep 3 10:18 switch_drivers64.sh
-rwxrwxrwx 1 tom tom 2.1K Sep 3 10:18 switch_drivers64_legacy.sh
root@admin:/# cat /etc/odbc/odbcinst.ini
[MacroBASE]
Driver=/usr/lib/libmodbc.so
Description=libmodbc.so
UsageCount=1
root@admin:/# cat /etc/odbc/odbc.ini
[Macrobase]
DRIVER=MacroBASE
UID=
PWD=
AS=1
ASNAME=xpertis
ASGROUP=default
ASADDRESS=10.0.0.102
ASPORT=5580
ASCERTUSE=0
ASCERTPTH=
root@admin:/# file /usr/lib/libmodbc.so
/usr/lib/libmodbc.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, with debug_info, not stripped
root@admin:/# ls -lah /usr/lib/ |grep "libm"
-r--r--r-- 1 root root 568K Sep 8 15:03 libmodbc.so
-r--r--r-- 1 root root 639K Sep 8 15:04 libmodbc64.so
-r--r--r-- 1 root root 640K Sep 8 15:04 libmodbc64_legacy.so
root@admin:/# isql -v Macrobase
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/libmodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
root@admin:/# isql -v -k "DRIVER={Macrobase};SERVER=10.0.0.102;UID=szef;PWD=szef"
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/libmodbc.so' : file not found
[ISQL]ERROR: Could not SQLDriverConnect
root@admin:/# isql Macrobase szef szef "select * from JM"
[ISQL]ERROR: Could not SQLConnect
root@admin:/# isql -v Macrobase szef szef "select * from JM"
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/libmodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
Napisany przez: Pyton_000 9.09.2021, 09:12:04
poka jeszcze ldd /usr/lib/libmodbc.so
Napisany przez: Tomplus 9.09.2021, 09:26:12
Kod
ldd /usr/lib/libmodbc.so
not dynamic executable
Napisany przez: Pyton_000 9.09.2021, 09:59:17
Próbowałeś uzywać wersji 64bit?
Napisany przez: Tomplus 13.09.2021, 08:40:38
Próbowałem, także wersji 32bit dla wszystkich...
polecenie LDD w ogóle na jednym serwerze z Debian działało, na innym już nie, nawet po zainstalowaniu dodatkowych bibliotek.
Tutaj mam przykład inny, niby informuje mnie o braku biblioteki, ale po dodaniu powiązania powiązania symbolicznego do tych miejsc nadal wskazuje że nie ma biblioteki:
Kod
root@SERVER-R220:/data/server/run# ldd libmodbc.so
linux-gate.so.1 (0xf7f99000)
libodbcinst.so => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7f12000)
libc.so.6 => /lib32/libc.so.6 (0xf7d34000)
/lib/ld-linux.so.2 (0xf7f9b000)
root@SERVER-R220:/data/server/run# find / -iname libodbcinst.so
/data/server/run/libodbcinst.so
/usr/lib32/libodbcinst.so
/usr/libx32/libodbcinst.so
/usr/lib/x86_64-linux-gnu/libodbcinst.so
/usr/lib/libodbcinst.so
root@SERVER-R220:/data/server/run# file /data/server/run/libodbcinst.so
/data/server/run/libodbcinst.so: symbolic link to /usr/lib/x86_64-linux-gnu/libodbcinst.so
/usr/lib/x86_64-linux-gnu/libodbcinst.so: symbolic link to libodbcinst.so.2.0.0
root@SERVER-R220:/data/server/run# file /usr/lib/x86_64-linux-gnu/libodbcinst.so.2.0.0
/usr/lib/x86_64-linux-gnu/libodbcinst.so.2.0.0: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=68020233737860bb4243431aae7a9186e9c1c6db, with debug_info, not stripped
Mam dodatkowe pytanie które może rozwiąże mój problem, a mianowicie jak mam dodać bibliotekę aby była widoczna dla innej biblioteki?
ldconfig -l {źródło_do_lib}Nie działa. Tj. działa, ale nie tak jakbym oczekiwał.
Kod
ldconfig -lX /lib64/libodbcinst.so
root@admin:/lib/odbc# ldconfig -v |grep libodbcinst
libodbcinst.so.2 -> libodbcinst.so.2.0.0
root@admin:/lib/odbc# ldd /data/server/run/libmodbc.so
linux-gate.so.1 (0xf7f64000)
libodbcinst.so => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7edf000)
libc.so.6 => /lib32/libc.so.6 (0xf7d01000)
/lib/ld-linux.so.2 (0xf7f66000)
Napisany przez: LowiczakPL 13.09.2021, 17:47:14
czy o coś takiego Ci chodzi? https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Napisany przez: Tomplus 15.09.2021, 08:57:27
Sprawdzę to, ale odsuwam to w czasie.
Póki co wkurzyłem się i zrobiłem to samo pod WINDOWS.
-> zainstalowałem sterownik MacroBASE
-> następnie w ODBC 32bit, utworzyłem połączenie DSN
-> pobrałem Apache 32bit
-> pobrałem PHP8 32bit
---
Teraz działa pobieranie danych z bazy.
Może faktycznie potrzebny był mi system linux w pełni 32bitowy, bo instalowanie bibliotek 32bitowych pod linuxem to katorga, mimo że segregują się bardzo klarownie drzewie katalogów, to gubię się w tym co jeszcze potrzebuję, jak tylko wywala mi jakiś błąd że czegoś nie ma, a jest.