Kam umístit knihovny
Nejlepším řešením je použít systém balení vaší distribuce Linuxu (apt-get
, yum
, nebo podobné) k instalaci knihoven z balíčků poskytovaných distribucí, kdykoli je to možné.
Pokud zabalené knihovny distribuce nejsou dostatečně aktuální verze, nebo pokud potřebujete nějaké nestandardní možnosti sestavení, nebo pokud potřebujete knihovnu, kterou vaše distribuce neposkytuje, můžete si ji sestavit a nainstalovat sami. Máte dvě hlavní možnosti, kam knihovnu umístit:
/usr/local
(knihovny pod/usr/local/lib
, záhlaví pod/usr/local/include
). Tím se nainstalují knihovny do celého systému a je to pravděpodobně nejjednodušší řešení, protože byste pak měli být schopni stavět proti nim bez dalších kroků. NEINSTALUJTE knihovny přímo pod/usr
, protože to bude narušovat systém balení vaší distribuce.- V adresáři vašeho projektu, stejně jako v systému Windows. To má výhodu v tom, že nevyžaduje přístup root a neprovádí změny v celém systému, ale budete muset aktualizovat cesty k projektu a cesty knihoven a budete muset umístit soubory sdílených knihoven někam, kde je dynamický linker najde ( pomocí
LD_LIBRARY_PATH
nebold.so.conf
- viz odkaz pro další podrobnosti).
Jak fungují knihovny
Viz vynikající programovací knihovna Davida A. Wheelera HOWTO. Doporučuji přečíst si to a poté zveřejnit konkrétní otázky jako nová témata.
Jak distribuovat program
Programy pro Unix/Linux tradičně neobsahují kopie svých závislostí. Místo toho je na koncovém uživateli nebo vývojáři, aby si tyto závislosti nainstaloval sám. To může vyžadovat "velké README", jak jste řekl, ale má to několik výhod:
- Vývojové knihovny lze instalovat, spravovat a aktualizovat prostřednictvím správce balíčků distribuce, namísto toho, aby každá zdrojová kopie měla svou vlastní sadu knihoven ke sledování.
- V systému je pouze jedna kopie každé dané knihovny, takže existuje pouze jedno místo, které je třeba aktualizovat, pokud je například nalezena bezpečnostní chyba. (Vezměme si například chaos, který nastal, když se zjistilo, že zlib, velmi široce používaná kompresní knihovna, má bezpečnostní chybu, takže každá aplikace, která obsahovala postiženou verzi, musela být aktualizována.)
- Pokud je váš program dostatečně populární (a je open source nebo alespoň volně dostupný), mohou ho správci balíčků pro různé distribuce Linuxu chtít zabalit a zahrnout do své distribuce. Správci balíčků opravdu nemají rádi svázané knihovny. Podívejte se například na stránku Fedory k tématu.
Pokud svůj program distribuujete koncovým uživatelům, můžete zvážit nabídku balíčku (.dpkg
nebo .rpm
), které si mohli jednoduše stáhnout a nainstalovat, aniž by museli používat zdroj. V ideálním případě by z pohledu koncového uživatele byl balíček přidán do repozitářů distros (pokud je open source nebo alespoň volně dostupný), aby si jej uživatelé mohli stáhnout pomocí svých správců balíčků (apt-get
nebo yum
). To vše se může zkomplikovat, protože existuje velké množství linuxových distribucí, ale .dpkg
kompatibilní s Debian/Ubuntu a .rpm
kompatibilní s Red Hat/CentOS/Fedora by měly pokrývat dobré procento koncových uživatelů. Sestavení balíčků není příliš těžké a na internetu jsou dobré návody.
k první části vaší otázky týkající se Windows:ve Windows neexistuje žádné skutečné standardní místo pro knihovny/hlavičky, takže snadné řešení je:vytvořit si vlastní. Jednoduše poskytněte na svém systému jedinou knihovnu lib/ a include/ a nechte ji používat všechny vaše projekty (nastavením cesty v souboru cmake, který všude zahrnete). Vložte tam všechny knihovny třetích stran, například:
vaše projekty:
d:/projects/projectA
d:/projects/projectB
věci třetí strany:
d:/api/lib/lua.lib
d:/api/include/lua/....
(můžete dokonce použít symbolické odkazy aka 'directory junctions', pokud máte jinou verzi)
a odpovídající soubor cmake:
include_directories( d:/api/include )
link_directories( d:/api/lib )