Linux programlarında .dlls ne yapıyor?


20

Unity3D for Linux ile yapılan oyunlar .dllveri klasörlerinde dosya içeriyor GameDataFolder/Managed.

Garip çünkü Linux'un .sodosyalar yerine .dlldosyaları kullandığını düşündüm .

(Aynı şey Android-Unity3D uygulamaları için de geçerlidir.)

Niye ya?

Yanıtlar:


25

Bahsettiğiniz oyunlar .NET Framework'e dayanıyor ve Microsoft'un .NET Framework'ün ücretsiz ve açık kaynaklı bir uygulaması olan Mono ile çalışıyor.

Bu uygulamalar .NET tabanlı olduğundan, Meclisler .dll uzantısına sahiptir. Böylece klasörlerde DLL dosyalarını görebilirsiniz.

Platformlar arası kullanım için tasarlanmış bir .NET programı, Windows, Linux veya Mac'te, MSIL'de derlenen ve yürütülecek bir .NET / Mono çalışma zamanı gerektiren aynı "ikili dosyalar" (aynı zamanda derlemeler içeren DLL'ler) ile de çalışabilir. .

Lütfen, Ubuntu depolarında bulunan Mono Framework tabanlı bazı ücretsiz uygulamaların (sadece oyunların) olmadığını unutmayın. Örneğin: Tomboy.


11
Ayrıca, bu dll'lerin "gerçek" windows olmadığını, dll'lerin değil, gerçekte .NET bayt kodunu derlediklerini unutmayın.
Sanya_Zol

5
Ayrıca .dllve dahil dosya uzantılarının .soLinux'ta anlamsız olduğunu unutmayın . Onlar sadece bizim rahatlığımız için kullanılıyor.
code_dredd

1
@ray Açıklayabilir misiniz? Dosya türü bilgilerini iletmek için hala standart olduklarını düşündüm, dolayısıyla anlamsız değil mi?
FMaz

2
@FynnMazurkiewicz: Her iki sistemin de uyguladığı tek bir merkezi özellikten biraz daha farklı tasarım gelenekleri meselesi . Aslında, hem Windows çekirdek ve Linux dinamik bağlayıcı mutlu olursa olsun (kendi formatlarında) paylaşılan kütüphane yükleyecektir onun olsun dosya adı .dll uçlarına ya .bu veya başka bir şey. Tarihsel nedenlerden dolayı, Windows'taki LoadLibrary sistem çağrısı bazı durumlarda zaten bir uzantıya sahip değilse, dosya adını ".dll" olarak ekler, ancak genellikle bu şekilde kullanılmaz .
Henning Makholm

1
@ray oldukça değil: gccörn gibi verilen bir kütüphane bulamazsınız -lmonun dosya adı ile bitmiyor eğer .soya .aya sürüm bilgisi varyantları da bunların.
Ruslan

9

İçindeki .dlldosyalar GameDataFolder/Managed, Mono’yu dahili olarak kullanan bir yerel kod programına aittir.

Unity oyun motoru Mono'yu (çoğu Windows platformunda bile) yerleştirir.

Platformlar arası çalıştırılabilir dosyalar ve .NET Common Language Runtime veya Mono tarafından çalıştırılabilen paylaşılan kütüphaneler, genellikle Windows'a özgü olmasalar da, sırasıyla sırasıyla .exeve .dllsoneklerle adlandırılır . Bir .dllprogramda Ubuntu gibi bir GNU / Linux sistemi veya Windows dışında bir işletim sistemi için bir dosya bulduğunuzda , genellikle bu yüzdendir. .dllBir Ubuntu sisteminde bulduğun çoğu zaman , Golboth'un cevabı açıklıyor. Ama burada olanlar tam olarak bu değil.

Unity oyun motoru - ile karıştırılmamalıdır en Ubuntu sürümlerde varsayılan grafik arayüzü popüler tescilli çapraz platform oyun motoru --is. Bu motor yok değil .NET Framework veya Mono üstünde çalışır. Bunun yerine, Mono'nun üstüne çıktığını söyleyen Mono'yu gömer . Bu, geliştiricilerin, Unity motorunun bir parçası olmayan oyunlarının ihtiyaç duyduğu kodları nasıl yazdıklarını açıklar.

Genel olarak, Mono, tam .NET / Mono programlarını çalıştırmak için Microsoft'un .NET CLR'sinin kullanıldığı şekilde kullanılabilir. Ancak Mono, bu uygulamaların özelleştirilmesini sağlamak da dahil olmak üzere, yerel kod uygulamalarına kolayca yerleştirilebilecek şekilde tasarlanmıştır . Tarif ettiğiniz durumda olan şey budur. Gördüğünüz dosyalar doğrudan Mono veya .NET CLR üzerinde çalışan bir programa ait değildir. Bunun yerine Mono'yu yerleştiren bir yerel kod programına aittirler.

Unity Game Engine Mono'yu Nasıl Kullanır?

Çoğunlukla C ++ dilinde yazılan Unity oyun motoru, sisteminizin paket yöneticisi tarafından yüklenen sürümü (varsa) kullanmayan - ve bundan farklı olan - kendi Mono örneğini barındırıyor. Bu gömülü Mono çalışma zamanı, bağımsız .NET / Mono programlarını çalıştırmak için kullanılamaz, çünkü bu amacı değildir. Bunun yerine, motorun yerel kod kısmı CIL kodunu çalıştırmak için kullanır. (CIL resmi adı olan Common Intermediate Language'dir . Microsoft, orijinal olarak geliştirdiğinden beri MSIL veya Microsoft Intermediate Language olarak adlandırılmıştı.) Unity motorunu kullanan oyunlar yapan programcılar genellikle kendi kodlarını C # dilinde yazıyorlardı. Desteklenmektedir.

Unity motoru, Mono'yu Windows'ta bile gömüyor. İçin Evrensel Windows Platform ve başka hiçbir platformlarda - - oyunlar yerine Mono Microsoft .NET Framework kullanır. Ancak Unity oyunlarının çoğu, çoğu mobil cihaz ve oyun konsolu dahil olmak üzere çoğu platformda ve Ubuntu ve Windows dahil olmak üzere Mono'yu kullanıyor. Bazı platformlarda IL2CPP , Mono'ya alternatif olarak mevcuttur ve yalnızca bir kaç IL2CPP desteklenmektedir. Ayrıntılar için Komut dosyası kısıtlamaları konusuna bakın .

.dllUbuntu'da Dosyaları Görebileceğiniz Diğer Durumlar

.dllUbuntu'da bir dosya görmenizin muhtemel olduğu iki durum tarif edilmiştir:

  1. .NET / Mono uygulaması tarafından kullanılması amaçlanan paylaşılan bir kütüphane. Golboth'un cevabı bunu detaylı olarak açıklar. .dllUbuntu sisteminde en çok göreceğiniz şey bu. Bu sadece klasörünüzdeki .dlldosyaların ne işe yaradığı anlamına gelmez GameDataFolder/Managed.
  2. Yerel bir kod uygulaması için "komut dosyası" sağlamak üzere yerleşik bir Mono çalışma zamanı tarafından kullanılan bir kod sağlayan dosya. Bu durumda olan budur.

.dllUbuntu'da bir dosya görebileceğiniz diğer iki yaygın durum vardır :

  1. .NET Core için derleyici , derlediğiniz kitaplık olmasa bile .dlldosyalar yerine .exedosyalar üretir . .NET Çekirdek (CoreCLR denir) çalışma zamanı ve olmayan normal .NET Framework veya Mono, bu dosyaları çalıştırır. .NET Çekirdek bir Microsoft ürünü olmakla birlikte, standart .NET Framework aksine NET Çekirdek çapraz platform ile resmi destek Ubuntu gibi GNU / Linux sistemleri için, ve ücretsiz açık kaynak yazılım .
  2. Bazen .dllUbuntu'da gördüğünüz bir dosya sadece bir Windows kütüphanesi olacaktır. Program bir Ubuntu sistemi depolanıyorsa ancak Windows'da çalışıyorsa veya Ubuntu'da bir Windows sürücüsü taktıysanız bunu görebilirsiniz. Ayrıca Wine ile birlikte gelen veya winetricksbaşka Windows yazılımlarını desteklemek için otomatik olarak yüklediğiniz yazılım da dahil olmak üzere Wine kullanarak Ubuntu'da çalıştırılabilen programlarla bağlantılı olarak görebilirsiniz .

Bu, .dllUbuntu'da karşılaşabileceğiniz tüm durumları ayrıntılı bir şekilde listeleme girişimi değildir . (Örneğin, bir OS / 2 kütüphanesi de olabilir .) Ancak, bu dört vakanın en yaygın olanlar olduğuna inanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.