Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah maksud linux obj?

Apakah maksud linux obj?

藏色散人
藏色散人asal
2023-04-17 09:38:082178semak imbas

linux obj mewakili ".o" dalam Linux, yang merupakan fail sasaran, yang bersamaan dengan fail ".obj" dalam Windows menyimpan kod dan data yang disusun, dan mempunyai nama simbol luar yang tidak dapat diselesaikan kadangkala berlaku apabila menyambung.

Apakah maksud linux obj?

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.

Apakah maksud linux obj?

Analisis ringkas fail .a, .so, dan .o dalam Linux

Apakah maksud linux obj?

Kata Pengantar

Apabila kami memasang kod sumber pada platform Linux, kami sering menemui maklumat output fail .so dan .o. Secara umumnya, kita hanya perlu melihat sekilas pada maklumat output fail ini dan tidak perlu meneroka secara mendalam. Tetapi jika kita perlu menulis sendiri kod sumber dan menyusunnya secara manual, kita perlu mempunyai pemahaman yang mendalam tentang maklumat ini.

Penjelasan Fail

Fail .so, .o, dan .a dalam Linux sebenarnya sepadan dengan obj, lib, dll, exe dan fail lain dalam Windows. Sebelum menerangkan fail ini dalam Linux, mari kita bincangkan dahulu tentang peranan fail ini dalam Windows.

Hubungan antara obj, lib, dll dan exe di bawah tingkap

exe ialah akhiran program boleh laku yang biasa kita ketahui, manakala obj, lib dan dll ialah fail utama yang membentuk proses berjalan program . lib sepadan dengan dll. lib ialah fail perpustakaan pustaka pautan statik, dan dll ialah fail perpustakaan pustaka pautan dinamik.

Apa yang dipanggil statik bermakna apabila memautkan, ekstrak perkara yang diperlukan dan susunkannya ke dalam fail exe anda Apabila anda menjalankan exe anda pada masa hadapan, anda tidak lagi memerlukan lib. Apa yang dipanggil dinamik bermakna apabila exe berjalan, ia bergantung pada fungsi yang disediakan dalam dll Tanpa dll ini, exe anda tidak boleh dijalankan.

lib, dll dan exe adalah semua fail sasaran akhir dan produk akhir. Dan c/c++ tergolong dalam kod sumber. Peralihan antara kod sumber dan fail sasaran akhir ialah obj kod perantaraan Sebenarnya, sebab mengapa kod perantaraan diperlukan ialah anda tidak boleh mendapatkan fail sasaran pada satu masa.

Sebagai contoh, exe memerlukan banyak fail cpp untuk dijana. Pengkompil hanya boleh menyusun satu fail cpp pada satu masa. Dengan cara ini, selepas pengkompil menyusun cpp, ia akan disusun ke dalam obj Apabila semua cpp yang diperlukan disusun menjadi obj, ia akan disatukan dan dipautkan ke dalam exe yang diperlukan pautan exe gagal.

obj menyimpan kod dan data terkumpul dengan nama, jadi masalah simbol luaran yang tidak dapat diselesaikan kadangkala berlaku semasa sambungan. Apabila ia disambungkan ke exe, tidak ada konsep nama, hanya alamat. lib ialah gabungan sekumpulan obj.

Secara teorinya, anda boleh menyambungkan fail obj untuk merujuk projek lain (anda boleh menganggap fail obj sebagai setara dengan fail cpp yang menyusun dan menjananya. Anda boleh merujuk obj untuk menggantikan cpp, atau menambah cpp untuk menggantikan obj), tetapi dalam praktiknya Lib biasanya digunakan untuk melaksanakan rujukan bersama antara projek.

Pengkompil akan memautkan beberapa perpustakaan yang biasa digunakan secara lalai, dan anda perlu menentukan yang lain sendiri.

Perbezaan antara lib dan dll

lib diperlukan semasa menyusun dan dll diperlukan semasa berjalan. Jika anda ingin melengkapkan kompilasi kod sumber, lib sudah memadai. Jika anda ingin menjalankan program yang dipautkan secara dinamik, dll sudah cukup. Semasa fasa pembangunan dan penyahpepijatan, sudah tentu terbaik untuk mempunyai kedua-duanya.

Atur cara perpustakaan dinamik am termasuk fail lib dan fail dll. Fail lib mesti disambungkan ke aplikasi semasa penyusunan, manakala fail dll hanya dipanggil semasa runtime. Jika terdapat fail dll, fail lib yang sepadan secara amnya adalah beberapa maklumat indeks, dan pelaksanaan khusus adalah dalam fail dll. Jika terdapat hanya fail lib, maka fail lib ini disusun secara statik, dan indeks dan pelaksanaannya ada di dalamnya.

Fail lib tersusun statik mempunyai kelebihan: tidak perlu memasang perpustakaan dinamik apabila memasangnya kepada pengguna. Tetapi terdapat juga kelemahan, iaitu aplikasinya agak besar dan fleksibiliti perpustakaan dinamik hilang Apabila versi dinaik taraf, aplikasi baharu mesti dikeluarkan pada masa yang sama.

Dalam kes perpustakaan dinamik, terdapat dua fail, satu ialah fail perpustakaan import (.LIB) (sebenarnya ia juga merupakan perpustakaan statik, tetapi apabila memaut, anda hanya boleh memautkan fungsi di kemasukan dll ke exe, bukannya memautkan badan fungsi ke exe seperti perpustakaan pautan statik sebenar, pemautan dinamik melalui lib sebenarnya dilaksanakan menggunakan pemautan statik), satu ialah fail dll, dan fail perpustakaan yang diimport mengandungi fail dieksport oleh dll Nama dan lokasi fungsi DLL mengandungi fungsi dan data sebenar Aplikasi menggunakan fail LIB untuk memautkan ke fail dll. Fungsi dan data dalam perpustakaan tidak disalin ke fail boleh laku.

Oleh itu, dalam fail boleh laku aplikasi, apa yang disimpan bukanlah kod fungsi yang dipanggil, tetapi alamat memori fungsi yang akan dipanggil dalam dll Dengan cara ini, apabila satu atau lebih aplikasi sedang berjalan, kod program dan fungsi yang dipanggil disimpan Kod fungsi yang dipanggil dipautkan bersama, dengan itu menjimatkan sumber memori. Seperti yang dapat dilihat daripada huraian di atas, fail dll dan .LIB mesti diedarkan dengan aplikasi, jika tidak, aplikasi akan menghasilkan ralat.

Fungsi dalam dll terbahagi kepada dua jenis:

fungsi eksport dll, yang boleh dipanggil oleh aplikasi

fungsi dalaman dll, yang hanya boleh digunakan dalam dll program, aplikasi Mereka tidak boleh dipanggil

Perbezaan antara fail .o, .a, dan .so di bawah Linux:

.o ialah fail sasaran, yang bersamaan dengan .obj fail dalam Windows.

.so ialah pustaka kongsi, objek kongsi, digunakan untuk sambungan dinamik, setara dengan dll di bawah Windows dan fail boleh laku dalam Linux.

.a ialah perpustakaan statik, secara terang-terangan, ia adalah sekumpulan .o yang disatukan untuk sambungan statik.

Pustaka fungsi statik

Ciri-ciri: Ia sebenarnya adalah koleksi fail sasaran biasa yang mudah yang ditambahkan pada program sasaran sebelum program dilaksanakan.

Kelebihan: Serasi dengan beberapa atur cara sebelumnya; jelas); pembangun juga boleh merahsiakan kod sumber.

Nama perpustakaan jenis ini biasanya libxxx.a Fail yang disusun menggunakan perpustakaan fungsi statik adalah agak besar, kerana semua data keseluruhan perpustakaan fungsi akan disepadukan ke dalam kod sasaran.

Kelemahan: Jika perpustakaan fungsi statik berubah, atur cara anda mesti dikompilasi semula.

Pustaka fungsi kongsi

Pustaka fungsi kongsi dimuatkan apabila atur cara boleh laku dimulakan dan fungsi dalam pustaka fungsi kongsi boleh dimuatkan secara automatik apabila semua atur cara dijalankan semula. Berbanding dengan perpustakaan fungsi statik, perpustakaan fungsi kongsi tidak disusun ke dalam kod sasaran semasa penyusunan.

Fungsi yang sepadan dalam pustaka fungsi kongsi hanya dipanggil apabila program melaksanakan fungsi yang berkaitan, jadi fail boleh laku yang dijana oleh pustaka fungsi kongsi adalah agak kecil Memandangkan pustaka fungsi kongsi tidak disepadukan ke dalam program anda , tetapi Ia digunakan secara dinamik dan dipanggil semasa program sedang berjalan, jadi perpustakaan yang sepadan mesti disediakan dalam persekitaran program yang sedang berjalan.

Perubahan dalam pustaka fungsi kongsi tidak menjejaskan program anda, jadi ia adalah lebih mudah untuk menaik taraf pustaka fungsi kongsi.

Cadangan berkaitan: "Tutorial Video Linux"

Atas ialah kandungan terperinci Apakah maksud linux obj?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah peranti linux adcArtikel seterusnya:Apakah peranti linux adc