Bạn đang làm gì trong các chương trình Linux?


20

Các trò chơi được tạo bằng Unity3D cho Linux chứa .dllcác tệp trong thư mục dữ liệu của chúng GameDataFolder/Managed.

Điều này thật kỳ lạ bởi vì tôi nghĩ rằng Linux sử dụng .socác tệp thay vì các .dlltệp.

(Điều này cũng đúng với các ứng dụng Android-Unity3D.)

Tại sao?

Câu trả lời:


25

Các trò chơi mà bạn đang nói đến dựa trên .NET Framework và chạy với Mono, đây là một triển khai miễn phí và nguồn mở của .NET Framework của Microsoft.

Bởi vì các ứng dụng này dựa trên .NET, Assemblies có phần mở rộng. Vì vậy, bạn có thể thấy các tập tin DLL trong các thư mục.

Một chương trình .NET được thiết kế để sử dụng đa nền tảng có thể chạy trên Windows, Linux hoặc Mac, với cùng một "nhị phân" (bao gồm cả DLL cũng là tập hợp), được biên dịch trong MSIL và cần thời gian chạy .NET / Mono .

Xin lưu ý rằng bạn cũng có một số ứng dụng miễn phí (không chỉ các trò chơi) dựa trên Mono Framework có sẵn trong kho của Ubuntu. Ví dụ: Tomboy.


11
Cũng lưu ý rằng các dll đó không phải là "cửa sổ" thực sự của dll nhưng thực sự được biên dịch mã byte .NET.
Sanya_Zol

5
Cũng lưu ý rằng các phần mở rộng tệp, bao gồm .dll.so, là vô nghĩa trong Linux. Chúng chỉ được sử dụng để thuận tiện cho chúng tôi.
code_dredd

1
@ray Bạn có thể giải thích? Tôi nghĩ rằng chúng vẫn là một tiêu chuẩn để truyền đạt thông tin loại tệp, do đó không phải là vô nghĩa?
FMaz

2
@FynnMazurkiewicz: Đó là vấn đề về truyền thống thiết kế hơi khác so với một thuộc tính trung tâm duy nhất mà cả hai hệ thống thực thi. Trong thực tế, cả nhân Windows trình liên kết động Linux sẽ vui vẻ tải một thư viện dùng chung (ở định dạng tương ứng của chúng) bất kể tên tệp của nó kết thúc bằng dll hay .so hay cái gì khác. Vì lý do lịch sử, tòa nhà LoadL Library trong Windows trong một số trường hợp sẽ thêm "dll" vào tên tệp nếu nó chưa có phần mở rộng, nhưng đó không phải là cách nó thường được sử dụng .
Henning Makholm

1
@ray không hoàn toàn: gccsẽ không tìm thấy một thư viện được cung cấp như ví dụ -lmnếu tên tệp của nó không kết thúc bằng .sohoặc .abiến thể phiên bản của chúng.
Ruslan

9

Các .dlltệp GameDataFolder/Managedthuộc về một chương trình mã gốc sử dụng Mono bên trong.

Công cụ trò chơi Unity nhúng Mono (thậm chí trên hầu hết các nền tảng Windows).

Các thư viện thực thi đa nền tảng và các thư viện chia sẻ có thể được chạy bởi .NET Common Language Runtime hoặc Mono thường được đặt tên tương ứng .exe.dllhậu tố, ngay cả khi chúng không dành riêng cho Windows. Khi bạn tìm thấy một .dlltệp trong một chương trình cho một hệ thống GNU / Linux như Ubuntu hoặc cho bất kỳ HĐH nào ngoài Windows, đây thường là lý do. Hầu hết thời gian bạn tìm thấy .dlltrong một hệ thống Ubuntu, câu trả lời của Golboth giải thích nó. Nhưng đó không phải là những gì đang diễn ra ở đây.

Công cụ trò chơi Unity - không nên nhầm lẫn với giao diện đồ họa mặc định trong hầu hết các bản phát hành Ubuntu - là một công cụ trò chơi đa nền tảng độc quyền phổ biến. Công cụ này không chạy trên .NET Framework hoặc Mono. Thay vào đó, nó nhúng Mono , nghĩa là Mono chạy trên đầu nó. Đây là cách các nhà phát triển viết bất kỳ mã nào mà trò chơi của họ cần mà chưa phải là một phần của công cụ Unity.

Nói chung, Mono có thể được sử dụng giống như cách sử dụng .NET CLR của Microsoft, để chạy các chương trình .NET / Mono hoàn chỉnh. Nhưng Mono cũng được thiết kế để có thể dễ dàng nhúng trong các ứng dụng mã gốc , bao gồm để cho phép các ứng dụng đó được tùy chỉnh . Đó là những gì đang diễn ra trong tình huống bạn đang mô tả. Các tệp bạn đang xem không thuộc về chương trình chạy trực tiếp trên Mono hoặc .NET CLR. Thay vào đó, chúng thuộc về một chương trình mã gốc nhúng Mono.

Công cụ trò chơi Unity sử dụng Mono như thế nào

Công cụ trò chơi Unity, được viết chủ yếu bằng C ++, lưu trữ phiên bản Mono của riêng nó, không sử dụng - và có thể khác với - phiên bản (nếu có) được cài đặt thông qua trình quản lý gói hệ thống của bạn. Thời gian chạy Mono nhúng này không thể được sử dụng để chạy các chương trình .NET / Mono độc lập, vì đó không phải là mục đích của nó. Thay vào đó, phần mã gốc của công cụ sử dụng nó để chạy mã CIL. (CIL là Common Intermediate Language , đó là tên chính thức của nó. Trước đây người ta gọi là MSIL hoặc Microsoft Intermediate Language, kể từ khi Microsoft phát triển nó ban đầu.) Các lập trình viên làm cho trò chơi mà sử dụng công cụ Unity thường viết mã riêng của họ trong C #, mặc dù một số ngôn ngữ khác được hỗ trợ.

Công cụ Unity nhúng Mono ngay cả trong Windows. Đối với các trò chơi Universal Windows Platform - và không có nền tảng nào khác - nó sử dụng Microsoft .NET Framework thay vì Mono. Nhưng phần lớn các trò chơi Unity trên hầu hết các nền tảng, bao gồm hầu hết các thiết bị di động và máy chơi game, và bao gồm Ubuntu và Windows, đều sử dụng Mono. Trên một số nền tảng, IL2CPP có sẵn thay thế cho Mono và trên một vài chỉ IL2CPP được hỗ trợ. Xem các hạn chế về Scripting để biết chi tiết.

Các tình huống khác mà bạn có thể thấy các .dlltệp trên Ubuntu

Hai tình huống mà bạn có thể thấy một .dlltệp trên Ubuntu đã được mô tả:

  1. Một thư viện dùng chung được sử dụng bởi ứng dụng .NET / Mono. Câu trả lời của Golboth mô tả chi tiết này. Đây là những gì hầu hết .dllbạn sẽ thấy trên một hệ thống Ubuntu. Nó chỉ không xảy ra là những gì các .dlltập tin trong GameDataFolder/Managedthư mục của bạn là dành cho.
  2. Một tệp cung cấp mã được sử dụng bởi thời gian chạy Mono nhúng để cung cấp "tập lệnh" cho ứng dụng mã gốc. Đó là những gì đang xảy ra trong trường hợp này.

Có hai trường hợp hợp lý phổ biến khác mà bạn có thể thấy một .dlltệp trên Ubuntu:

  1. Trình biên dịch cho .NET Core tạo ra .dllcác tệp chứ không phải .execác tệp, ngay cả khi những gì bạn đang biên dịch không phải là thư viện. Thời gian chạy .NET Core (được gọi là CoreCLR), chứ không phải .NET Framework hoặc Mono thông thường, chạy các tệp này. .NET Core là một sản phẩm của Microsoft, nhưng không giống như .NET Framework tiêu chuẩn, .NET Core là nền tảng chéo với sự hỗ trợ chính thức cho các hệ thống GNU / Linux như Ubuntu và nó là phần mềm nguồn mở miễn phí .
  2. Đôi khi một .dlltệp bạn thấy trên Ubuntu sẽ chỉ là một thư viện Windows. Bạn có thể thấy điều này nếu chương trình đang được lưu trữ một hệ thống Ubuntu nhưng chạy trên Windows hoặc nếu bạn gắn ổ đĩa Windows trong Ubuntu. Bạn cũng có thể thấy nó liên quan đến các chương trình có thể chạy trên Ubuntu bằng Wine , bao gồm phần mềm đi kèm với Wine hoặc bạn tự động cài đặt winetricksđể hỗ trợ các phần mềm Windows khác.

Đây không phải là một nỗ lực để liệt kê đầy đủ tất cả các trường hợp mà bạn có thể gặp phải .dlltrên Ubuntu. (Ví dụ, nó cũng có thể là thư viện OS / 2. ) Tuy nhiên, tôi tin rằng bốn trường hợp đó là những trường hợp phổ biến nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.