Biblioteki środowiska wykonawczego#
Aby zobrazować, że nawet proste programy zależą od zewnętrznych bibliotek środowiska wykonawczego, spójrz na dane wyjściowe narzędzia ldd, który raportuje takie zależności:
$ ldd tabulate.exe
        ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ff88f2b0000)
        KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ff88e450000)
        KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ff88b9e0000)
        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
        cyggfortran-5.dll => /usr/bin/cyggfortran-5.dll (0x3efd20000)
        cygquadmath-0.dll => /usr/bin/cygquadmath-0.dll (0x3ee0b0000)
        cyggcc_s-seh-1.dll => /usr/bin/cyggcc_s-seh-1.dll (0x3f7000000)
Inne kompilatory lub inne wersje tego samego kompilatora będą prawdopodobnie wymagały innych dynamicznych bibliotek. Dopóki program działa na tym samym komputerze — lub, bardziej precyzyjnie, w tym samym środowisku — nie powinno być żadnego problemu. Jeśli jednak taka biblioteka nie może zostać odnaleziona, otrzymasz (miejmy nadzieję) komunikat o błędzie, a program natychmiast się zatrzyma.
Dlatego dobrze jest wiedzieć jakie biblioteki są wymagane. Na Linuksie oraz środowiskach linuksowych, narzędzie ldd jest bardzo pomocne. Na Windowsie natomiast warto skorzystać z narzędzia dependency walker (najnowszą wersję, która działa bardzo dobrze na Windowsie 10 możesz znaleźć tutaj: lucasg/Dependencies)
Kolejną rzeczą, którą powinieneś wiedzieć jest to, gdzie program próbuje znaleźć te biblioteki. Jest to obszerny temat sam w sobie, pełen zawiłości i historii. Tutaj go tylko szybko wspomnimy:
Na Linuksie:
- Używana jest zmienna środowiskowa - LD_LIBRARY_PATH. Składa się z listy katalogów do przeszukania, każdy z nich oddzielony jest dwukropkiem (:) od pozostałych. Na przykład:- /usr/lib:/usr/local/lib- typowe katalogi systemowe.
- W procesie łączenie możesz również skorzystać z opcji określenia - RPATH, listy katalogów umieszczanej w samym pliku wykonywalnym.
- Następnie przeszukiwanych jest kilka katalogów systemowych. 
Na Windowsie:
- Katalog zawierający program wykonywalny może również zawierać biblioteki dynamiczne. 
- Używana jest zmienna środowiskowa „PATH”. Ponownie lista katalogów do przeszukania, jednak teraz znakiem rozdzielającym jest średnik (;). 
- Przeszukiwane są katalogi systemowe. 
Niestety, szczegóły tego procesu mogą się różnić w zależności od wersji systemu operacyjnego. Powyższe informacje mogą służyć jedynie za wskazówkę — używaj narzędzi takich jak „ldd” lub „dependency walker”, aby dokładnie dowiedzieć się jakie biblioteki są ładowane i gdzie się znajdują.
Jeśli chcesz udostępnić swój program współpracownikom, klientom, a nawet użytkownikom na całym świecie, musisz zadbać o to, aby oprócz samego programu, udostępnić również biblioteki, od których jest on zależny. Więcej informacji znajdziesz poniżej.
