Tempat meletakkan perpustakaan
Solusi terbaik adalah menggunakan sistem pengemasan distribusi Linux Anda (apt-get
, yum
, atau serupa) untuk menginstal pustaka dari paket yang disediakan distro jika memungkinkan.
Jika pustaka terpaket distro tidak memiliki versi yang cukup baru, atau jika Anda memerlukan beberapa opsi build yang tidak standar, atau jika Anda memerlukan pustaka yang tidak disediakan oleh distro Anda, maka Anda dapat membangun dan menginstalnya sendiri. Anda memiliki dua opsi utama untuk menempatkan perpustakaan:
/usr/local
(pustaka di bawah/usr/local/lib
, tajuk di bawah/usr/local/include
). Ini menginstal perpustakaan di seluruh sistem dan mungkin merupakan solusi paling sederhana, karena Anda kemudian dapat membangunnya tanpa mengambil langkah tambahan apa pun. JANGAN instal pustaka langsung di bawah/usr
, karena itu akan mengganggu sistem pengemasan distro Anda.- Di bawah direktori proyek Anda, seperti yang Anda lakukan di Windows. Ini memiliki keuntungan karena tidak memerlukan akses root dan tidak membuat perubahan di seluruh sistem, tetapi Anda harus memperbarui jalur penyertaan dan jalur pustaka proyek Anda, dan Anda harus meletakkan file pustaka bersama di suatu tempat di mana linker dinamis dapat menemukannya ( menggunakan
LD_LIBRARY_PATH
atauld.so.conf
- lihat tautan untuk detail lebih lanjut).
Cara kerja perpustakaan
Lihat HOWTO Perpustakaan Pemrograman David A. Wheeler yang luar biasa. Saya sarankan untuk membacanya kemudian memposting pertanyaan spesifik apa pun sebagai topik baru.
Cara mendistribusikan program Anda
Secara tradisional, program Unix / Linux tidak menyertakan salinan dependensinya. Alih-alih terserah kepada pengguna akhir atau pengembang untuk menginstal dependensi itu sendiri. Ini membutuhkan "README besar", seperti yang Anda katakan, tetapi memiliki beberapa keuntungan:
- Pustaka pengembangan dapat dipasang, dikelola, dan diperbarui melalui pengelola paket distro, alih-alih setiap salinan sumber memiliki kumpulan pustakanya sendiri untuk dilacak.
- Hanya ada satu salinan dari perpustakaan tertentu pada sistem, jadi hanya ada satu tempat yang perlu diperbarui jika, misalnya, ditemukan kelemahan keamanan. (Misalnya, perhatikan kekacauan yang terjadi saat zlib, pustaka kompresi yang sangat banyak digunakan, ditemukan memiliki kelemahan keamanan, sehingga setiap aplikasi yang menyertakan versi yang terpengaruh perlu diperbarui.)
- Jika program Anda cukup populer (dan open source atau setidaknya tersedia secara bebas), maka pengelola paket untuk berbagai distribusi Linux mungkin ingin mengemasnya dan memasukkannya ke dalam distro mereka. Pemelihara paket benar-benar tidak suka perpustakaan yang dibundel. Lihat, misalnya, halaman Fedora tentang topik tersebut.
Jika Anda mendistribusikan program ke pengguna akhir, Anda mungkin ingin mempertimbangkan untuk menawarkan paket (.dpkg
atau .rpm
) yang dapat mereka unduh dan instal dengan mudah tanpa harus menggunakan sumber. Idealnya, dari sudut pandang pengguna akhir, paket tersebut akan ditambahkan ke repositori distro (jika open source atau setidaknya tersedia secara bebas) sehingga pengguna dapat mengunduhnya menggunakan manajer paket mereka (apt-get
atau yum
). Ini semua bisa menjadi rumit, karena banyaknya distro Linux di luar sana, tetapi .dpkg
yang kompatibel dengan Debian/Ubuntu dan .rpm
yang kompatibel dengan Red Hat/CentOS/Fedora harus mencakup persentase yang baik dari pengguna akhir. Membuat paket tidak terlalu sulit, dan ada panduan online yang bagus.
untuk bagian pertama dari pertanyaan Anda tentang Windows:tidak ada tempat standar nyata untuk perpustakaan/header di Windows, jadi solusi mudahnya adalah:buat milik Anda sendiri. Cukup berikan satu lib/ dan sertakan/ pada sistem Anda dan buat semua proyek Anda menggunakannya (dengan menyetel jalur dalam file cmake yang Anda sertakan di mana saja). Letakkan semua lib pihak ketiga di sana, misalnya:
proyek Anda:
d:/projects/projectA
d:/projects/projectB
barang pihak ketiga:
d:/api/lib/lua.lib
d:/api/include/lua/....
(Anda bahkan dapat menggunakan symlinks alias 'directory junctions' jika Anda memiliki versi yang berbeda)
dan file cmake yang sesuai:
include_directories( d:/api/include )
link_directories( d:/api/lib )