Pertanyaan Mendistribusikan biner dengan dependensi di Linux


Saya sedang mengembangkan aplikasi lintas-platform dan saya mengalami masalah dengan mendistribusikan biner Linux. Di Windows dll adalah - libsndfile-1.dll lua5.1.dll lua51.dll openal32.dll sfml-audio.dll sfml-graphics.dll sfml-network.dll sfml-system.dll sfml-window.dll

Ini adalah pra-rilis yang sangat awal, jadi saya tidak ingin menulis paket. Saya hanya tertarik untuk mengunduh unduhan dan menjalankan biner di dalamnya. Apa cara khas bagi pengguna untuk mendapatkan dependensi ini di Linux, tanpa menulis paket?

P.S. Juga saya memiliki Linux 64-bit, dan satu pengguna melaporkan bahwa aplikasi tidak berjalan di Linux 32-bit mereka. Apa yang bisa menjadi masalah? Saya tidak memiliki masalah ini dengan Windows (dibangun di atas sistem 64-bit, berfungsi pada 32-bit).


2
2017-07-17 15:34


asal


Ini harus pergi ke SO. - Shiki


Jawaban:


Saya tidak yakin apakah ini memang yang Anda cari, tetapi biasanya apa yang dilakukan untuk program Linux adalah Anda mencantumkan dependensi pada halaman web tempat Anda menawarkan produk untuk diunduh. Dalam kasusmu, sesuatu seperti

Anda harus memasang yang berikut ini:

(Tentunya tentukan nomor versi juga, jika program Anda hanya bekerja dengan versi tertentu) Kemudian pengguna Linux akan memeriksa manajer paket mereka untuk memastikan mereka memiliki semua itu sebelum mencoba menginstal program Anda.

Beberapa program didistribusikan dengan cara yang dijelaskan Ignacio, yaitu menyertakan semua dependensi yang Anda butuhkan di dalam arsip yang Anda distribusikan. Itu cenderung mengganggu beberapa orang sedikit karena mereka terjebak dengan salinan ekstra dari perpustakaan yang tidak dapat ditingkatkan, dan bahkan mungkin bertabrakan dengan versi sistem.


2
2017-07-17 17:12





Anda dapat secara statis menghubungkan program ke semua perpustakaan tetapi libc dan libm. (Heck, kamu bahkan bisa link di dalamnya).


2
2017-07-17 17:37





Yang setara di Linux adalah memasukkan file .so ke dalam direktori di dalam paket, dan memiliki set skrip shell $LD_LIBRARY_PATH untuk menunjuk ke direktori ini dan kemudian jalankan biner yang dapat dieksekusi.

Masalah dengan 32 vs 64 adalah bahwa kompiler menghasilkan kode 64-bit, dan tautan dengan pustaka 64-bit. Anda harus menginstal toolchain 32-bit untuk membangun biner 32-bit. Anda bisa berlari file terhadap berbagai binari untuk mengkonfirmasi ini.


1
2017-07-17 15:52





Anda bisa mendapatkan dependensi biner dengan menggunakan perintah ldd

Misalnya:

ldd program_binary

        libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)

Tetapi lebih baik untuk berbagi sebagai sumber karena lib bisa dari versi yang berbeda memiliki simbol yang berbeda atau dari arsitektur yang berbeda.


1
2017-07-17 16:47