Autor Wątek: Czy dll też jest na Linuksie?  (Przeczytany 2964 razy)

Offline eMul

  • Użytkownik

# Styczeń 16, 2007, 17:11:52
Nie znam się na Linuksach, jedynie na Windowsie, więc stad moje pytanie - Czy *.dll można używać na Linuksie? A jesli tak, to czy trzeba kompilować na każdym systemie oddzielnie?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

agent_J

  • Gość
# Styczeń 16, 2007, 17:18:26
Dynamiczne biblioteki na Linuksie to pliki *.so. Z grubsza działają jak *.dll na Windows. Trochę inaczej rozwiązane jest wersjonowanie.

Offline eMul

  • Użytkownik

# Styczeń 16, 2007, 17:24:13
A czy są jakies wieloplatformowe biblioteki dynamiczne?

agent_J

  • Gość
# Styczeń 16, 2007, 17:41:12
Możesz próbować ładować dll na Linuksie przez Wine (lub patrząc jak Wine to robi).

agent_J

  • Gość
# Styczeń 16, 2007, 17:58:57
Jak sobie napiszesz loader, to będzie wieloplatformowa.

A co do DLLi linuxowych:

Linkuje się tak:
g++ plik1.o plik2.o -shared -o libMojLib.so
Można tak:
g++ plik1.o -shared -Wl,-soname=libMojLib.so.1 -o libMojLib.so
ln -s libMojLib.so.1 libMojLib.so

-soname zmienia ci nazwę DLLa, jakiej potem będzie wymagał linker dynamiczny.
Przykładowe użycie: robimy bibliotekę w wersji 1, kompilujemy i releasujemy z nią program.
Potem upgrade'ujemy bibliotekę do wersji 2, ale wgrywamy plik libMojLib.so.2 i podlinkowujemy
libMojLib.so do najnowszej wersji. Dzięki temu nie tracimy liba w wersji 1, a nowe programy zlinkowane
z libMojLib.so będą od teraz wymagać liba w wersji 2. Oczywiście wszystko jest OK jeśli nie zmieni się ABI
biblioteki - czyli np. pola w strukturach, ilość metod wirtualnych w klasach, i inne. Z C nie będzie wielkiego
problemu o ile zachowamy taką samą kolejność i ilość argumentów funkcji i struktury używane przez programy
zewnętrzne.

Jeszcze jest kilka ważnych zmiennych środowiskowych:

LD_LIBRARY_PATH - zawiera dodatkowe ścieżki przeszukiwania bibliotek
LD_PRELOAD - lista bibliotek do załadowania przy starcie aplikacji.
« Ostatnia zmiana: Styczeń 16, 2007, 18:05:35 wysłana przez agent_J »

Offline skalniak

  • Użytkownik
    • Home page

# Styczeń 17, 2007, 01:00:54
czesc, dodam ze aby korzystac z dll'kow uzywa sie z funkcji w naglowku dlfcn.h.

Pozdr. skalniak
« Ostatnia zmiana: Styczeń 17, 2007, 01:57:21 wysłana przez skalniak »