Apakah dependensi Nested Static Library mungkin?

12

Saya bekerja di QT.

  1. Dapatkah pustaka statis bergantung pada pustaka statis lain? (Lib statis dibuat dengan menautkan lib statis lain)
  2. Jika ya, apakah mungkin setelah menautkan ke lib2, lib yang dihasilkan (lib1) tidak akan berisi semua kode lib2?

Dalam Proyek Qt saya, saya menggunakan perpustakaan statis, yang tergantung pada banyak perpustakaan. Saya harus menambahkan semua perpustakaan (dengan semua header mereka dalam proyek saya), walaupun saya hanya perlu satu lib (dan satu .h dari kelas itu) dalam kode saya.

Tolong jelaskan skenarionya.

sk patra
sumber

Jawaban:

6

Ketika Anda menyatakan sesuatu, Anda hanya berjanji bahwa selama menautkan itu akan tersedia dan diidentifikasi secara unik. Lib statis tidak lebih dari wadah untuk definisi dalam format yang di luar standar. Jadi, ini memiliki implikasi berikut:

1) Saya tidak begitu mengerti apa yang Anda tanyakan di sini, tetapi satu perpustakaan statis dapat sangat bergantung pada perpustakaan statis lain. Entah Anda berjanji bahwa definisi perpustakaan itu akan tersedia selama tahap penautan terakhir dari executable Anda (dengan menyediakannya sebagai ketergantungan tautan). Atau Anda "menggabungkan" selama menghubungkan lib statis.

2) Jawaban untuk ini kemudian menjadi bahwa satu-satunya hal yang perlu Anda lakukan adalah tidak menghubungkan di lib2 selama menghubungkan lib1.

Secara keseluruhan pendekatan terbaik dalam pengalaman saya adalah dengan hanya menggabungkan libs yang bersifat pribadi, alasannya adalah bahwa jika tidak, klien akan mengalami pelanggaran simbol yang berlipat ganda ketika bagian lain dari proyek mereka berbagi ketergantungan dengan Anda.

Ylisar
sumber
Ini berarti, lib statis yang tergantung pada lib statis lain, tetapi berisi informasi yang menghubungkan lib tersebut MUNGKIN. Itu artinya ketika saya harus memasukkan lib pertama dalam proyek saya, saya juga harus menyertakan lib yang kedua. Bcoz, lib pertama tidak mengandung seluruh kode lib kedua. Apakah saya benar?
sk patra
6

Cepat saya dua bit tentang ini: 10 (lelucon mengerikan maaf).

Untuk sedikit berkembang, begini:

1- Perpustakaan statis dapat bergantung pada perpustakaan statis lain, tidak ada atau bahkan perpustakaan dinamis: dalam dua contoh pertama semua kode untuk perpustakaan statis baru akan dimasukkan dalam SLL (Static Link Library) baru, namun, opsi ke-3 , tergantung pada evironment dapat menyebabkan SLL memiliki salah satu dari hasil berikut,

  • itu akan berisi versi statis dari kode yang dibutuhkannya yang dikumpulkan dari DLL (Dynamic Link Library)
  • atau, jauh lebih mengerikan, Anda akan memiliki perpustakaan statis yang ketika dimasukkan dalam proyek akan menyebabkan persyaratan pengiriman dengan DLL, melanggar seluruh titik penghubung statis.

Jadi singkatnya, Anda dapat menautkan pustaka statis ke pustaka statis

2 - jika lib1 dan lib2 keduanya statis, dan lib1 telah dikaitkan dengan lib2, maka semua fungsionalitas lib2 akan tersedia dalam lib1 tanpa perlu memasukkan lib2 karena lib2 akan secara statis dihubungkan dalam lib1 (pikirkan boneka Rusia, dengan lib2 menjadi lebih kecil).

Dalam skenario yang Anda jelaskan harus ada fungsi diskrit yang tersedia di setiap file yang harus Anda sertakan, yang tidak terhubung secara statis, karenanya diperlukan beberapa file, jika tidak, Anda akan memiliki satu file untuk dimasukkan dan Anda akan baik-baik saja.

Ambil berikut ini: Satu file .h dengan referensi ke 6 perpustakaan yang terhubung secara statis: Anda harus menyertakan 7 file dalam proyek Anda untuk mendapatkan fungsionalitas penuh

contoh inklusi 1

Satu SLL yang dibuat dari file .h tersebut hanya akan membutuhkan SLL baru untuk dimasukkan untuk menghubungkan pada kompilasi:

contoh inklusi 2

Semoga ini bisa membantu dan saya mengerti apa yang Anda minta.

GMasucci
sumber