Pertanyaan Apakah ada Linux yang setara dengan "file sumber" Windows?


Saya memiliki pustaka C, yang saya buat sebagai objek bersama untuk Linux dan DLL untuk Windows dengan MinGW32. API bergantung pada beberapa file data (model statistik) yang saya sangat ingin bergabung dengan SO / DLL sehingga penyebaran hanya satu file.

Sepertinya saya dapat mencapai ini untuk Windows dengan "file sumber daya" yang dikompilasi windres, tapi kemudian saya harus menulis banyak kode penanganan sumber daya untuk Windows, dan saya masih terjebak dengan file di Linux.

Apakah ada cara untuk mencapai fungsi yang sama di Linux?

Lebih baik lagi, apakah ada solusi portabel?


32
2018-01-04 02:03


asal


Jawaban:


Ini sebenarnya cukup sederhana di Linux dan sistem ELF lainnya: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967

OS X memiliki bundel, jadi Anda cukup membangun pustaka Anda sebagai kerangka kerja dan meletakkan file dalam bundel.


29
2018-01-04 03:23



Dua solusi potensial:

  • Phong Vo's sfio perpustakaan, yang merupakan bagian dari toolset AT & T Advanced Software Technology, adalah pengganti yang indah untuk C stdio.h, dan itu akan memungkinkan Anda untuk membuka file atau blok memori menggunakan satu API. Jadi Anda dapat dengan mudah mengkonversi file yang ada ke data diinisialisasi C untuk dimasukkan ke dalam file DLL atau SO Anda.

    Ini adalah solusi lintas platform yang bagus, tetapi hukumannya adalah bahwa kurva belajar untuk memulai cukup tinggi. Mereka tidak mempermudah untuk mencari tahu bagaimana barang bekerja atau untuk mengambil satu bagian dari toolset mereka dan membaginya untuk digunakan independen dari bagian lain. Tetapi kabar baiknya adalah jika Anda ingin mengadopsi sistem U / Win untuk menjalankan kode Unix pada windows (semua bagian dari toolset yang sama), Anda dapat membuat DLL dan SO menggunakan sistem yang sama.

  • Untuk masalah seperti ini saya sering jatuh kembali Lua; Saya dapat menyimpan data Lua di file eksternal atau dalam C sebagai data yang diinisialisasi. Ini bagus untuk mendistribusikan semuanya dalam satu file .so; Saya melakukan ini untuk murid-murid saya.

    Lagi-lagi kerugiannya adalah Anda harus menguasai dan memasukkan teknologi baru.

Dalam pekerjaan saya sendiri, saya menggunakan Lua di atas barang-barang AT & T karena alasan-alasan ini:

  • Lua memiliki sebuah banyak tapak yang lebih kecil dan dirancang untuk bermain baik dengan orang lain; dengan AST Anda benar-benar telah mengadopsi cara mereka melakukan sesuatu.

  • Kurva belajar dengan Lua jauh lebih tidak curam; Anda bisa produktif dengan sangat cepat.

  • Lua sudah mati mudah untuk menginstal dan mudah untuk mendapatkan informasi tentang itu. AST memiliki proses instalasinya sendiri yang dimiliki oleh orang lain di dunia; seringkali sulit untuk melakukan instalasi; dan lebih sulit mendapatkan informasi tentang itu.

  • Menggunakan Lua memiliki banyak imbalan lainnya, sehingga upaya menghabiskan pembelajaran Lua dan belajar bagaimana menggabungkan Lua ke dalam kode C mudah dikamortisasi melalui beberapa proyek.


0
2018-01-04 03:02