GNU/Linux >> Belajar Linux >  >> Linux

Tautan dinamis - Linux Vs. Windows

Penaut MSVC dapat menautkan bersama file objek (.obj) dan pustaka objek (.lib) untuk menghasilkan .EXE atau .DLL.

Untuk menautkan dengan DLL, proses di MSVC adalah menggunakan pustaka impor (.LIB) yang disebut sebagai perekat antara nama fungsi C dan tabel ekspor DLL (dalam DLL, fungsi dapat diekspor berdasarkan nama atau secara ordinal - yang terakhir sering digunakan untuk API yang tidak berdokumen).

Namun, dalam banyak kasus, tabel ekspor DLL memiliki semua nama fungsi dan dengan demikian pustaka impor (.LIB) berisi sebagian besar informasi yang berlebihan ("impor fungsi ABC -> fungsi ekspor ABC ", dll).
Bahkan dimungkinkan untuk menghasilkan .LIB dari .DLL yang sudah ada.

Penaut di platform lain tidak memiliki "fitur" ini dan dapat menautkan dengan pustaka dinamis secara langsung.


Di Linux, linker (bukan linker dinamis) mencari melalui pustaka bersama yang ditentukan pada waktu link dan membuat referensi ke sana di dalam executable. Saat penaut dinamis memuat executable ini, ia memuat pustaka bersama yang diperlukan ke dalam memori dan menyelesaikan simbol, yang memungkinkan binari dijalankan.

MySo.a , jika dibuat, sebenarnya akan menyertakan simbol untuk ditautkan langsung ke biner alih-alih "tabel pencarian simbol" yang digunakan di Windows.

jawaban rustyx menjelaskan proses di Windows lebih menyeluruh daripada yang saya bisa; sudah lama saya tidak menggunakan Windows.


Perbedaan yang Anda lihat lebih merupakan detail implementasi - di bawah tenda, Linux dan Windows bekerja dengan cara yang sama - Anda kode memanggil fungsi rintisan yang ditautkan secara statis dalam executable Anda dan rintisan ini kemudian memuat DLL/shlib jika perlu (jika tertunda memuat, jika tidak, perpustakaan dimuat saat program dimulai) dan (pada panggilan pertama) menyelesaikan simbol melalui GetProcAddress /dlsym .

Satu-satunya perbedaan adalah bahwa di Linux, fungsi rintisan ini (yang disebut rintisan PLT) dihasilkan secara dinamis saat Anda menautkan aplikasi Anda dengan pustaka dinamis (pustaka berisi informasi yang cukup untuk membuatnya), sedangkan di Windows pustaka dibuat saat DLL sendiri dibuat, dalam .lib terpisah berkas.

Kedua pendekatan ini sangat mirip sehingga memungkinkan untuk meniru pustaka impor Windows di Linux (lihat proyek Implib.so).


Linux
  1. 10 ALASAN MENGUBAH WINDOWS 10 KE LINUX

  2. Linux vs Windows Hosting

  3. Menggunakan Windows DLL dari Linux

  1. Cara Memantau Mesin Windows Jarak Jauh Menggunakan Nagios di Linux

  2. Kemungkinan untuk menggunakan .dll di Linux

  3. Tautan statis Linux sudah mati?

  1. Linux – Bagaimana Cara Menghapus Instalasi Grub?

  2. Alat Linux untuk memeriksa DLL Windows

  3. exFAT vs NTFS di Linux