Linux 프로그램에서 .dll은 무엇입니까?


20

Linux 용 Unity3D로 만든 게임은 .dll데이터 폴더에 파일을 포함 합니다 GameDataFolder/Managed.

Linux가 .so파일 대신 파일을 사용한다고 생각했기 때문에 이상 .dll합니다.

(Android-Unity3D 앱에서도 마찬가지입니다.)

왜?

답변:


25

여러분이 말하는 게임은 .NET Framework를 기반으로하며 Microsoft의 .NET Framework의 무료 오픈 소스 구현 인 Mono로 실행됩니다.

이러한 응용 프로그램은 .NET 기반이므로 어셈블리의 확장명은 .dll입니다. 폴더에서 DLL 파일을 볼 수 있습니다.

크로스 플랫폼 사용을 위해 설계된 하나의 .NET 프로그램은 MSIL로 컴파일되고 .NET / Mono 런타임이 필요한 동일한 "이진"(조립품 인 DLL 포함)으로 Windows, Linux 또는 Mac에서 실행될 수 있습니다. .

Ubuntu 리포지토리에서 사용 가능한 Mono Framework 기반의 일부 무료 응용 프로그램 (게임뿐만 아니라)도 있습니다. 예를 들면 다음과 같습니다. Tomboy.


11
또한 해당 dll은 "실제"windows dll이 아니라 실제로 컴파일 된 .NET 바이트 코드입니다.
Sanya_Zol

5
또한 포함하는 파일 확장자를주의 .dll하고 .so, 리눅스에서 의미가있다. 그들은 우리의 편의를 위해서만 사용됩니다.
code_dredd

1
@ray 설명 할 수 있습니까? 파일 형식 정보를 전달하는 표준이라고 생각했는데 의미가 없습니까?
FMaz

2
@FynnMazurkiewicz : 시스템 중 하나가 적용 하는 단일 중앙 속성보다 디자인 전통이 약간 다릅니다 . 사실, 모두 Windows 커널 리눅스 동적 링커 행복에 상관없이 (각각의 형식으로) 공유 라이브러리를로드의 여부를 파일 이름 .DLL의 끝 또는 .so를 또는 뭔가. 역사적 이유로 Windows의 LoadLibrary syscall은 경우에 따라 확장명이 아직없는 경우 파일 이름에 ".dll"을 추가하지만 일반적으로 사용되는 방식이 아닙니다 .
Henning Makholm

1
@ray 확실히하지 : gcc예처럼 제공되는 라이브러리를 찾을 수 없습니다 -lm파일 이름이로 끝나지 않는 경우 .so.a또는 버전 화 변형을 포함한다.
Ruslan

9

.dll에있는 파일에 GameDataFolder/Managed속하는 내부적으로 모노를 사용하는 네이티브 코드 프로그램.

Unity 게임 엔진 모노 (대부분의 Windows 플랫폼에서도)를 포함합니다.

.NET 공용 언어 런타임 또는 Mono로 실행할 수있는 크로스 플랫폼 실행 파일 및 공유 라이브러리는 Windows에 고유하지 않은 경우에도 각각 이름 .exe.dll접미사가 붙습니다. .dllUbuntu와 같은 GNU / Linux 시스템 또는 Windows 이외의 OS 용 프로그램에서 파일 을 찾을 때 이것이 일반적 입니다. .dll우분투 시스템에서 대부분을 찾을 때 Golboth의 답변에 설명되어 있습니다. 그러나 그것은 여기서 일어나고있는 것이 아닙니다.

유니티 게임 엔진 - 와 혼동해서는 안 대부분의 우분투 버전의 기본 그래픽 인터페이스는 인기있는 독점적 인 크로스 플랫폼 게임 엔진을 --is. 이 엔진은 .NET Framework 또는 Mono 위에서 실행 되지 않습니다 . 대신 Mono 가 포함되어 있습니다. 즉 Mono가 그 위에서 실행됩니다. 이것이 개발자가 게임에 필요한 코드를 작성하여 Unity 엔진의 일부가 아닌 방법입니다.

일반적으로 Mono는 완전한 .NET / Mono 프로그램을 실행하기 위해 Microsoft의 .NET CLR이 일반적으로 사용되는 것과 같은 방식으로 사용될 수 있습니다. 그러나 Mono는 또한 이러한 응용 프로그램을 사용자 정의 할 수있는 기능을 포함 하여 기본 코드 응용 프로그램에 쉽게 포함 할 수 있도록 설계되었습니다 . 그것은 당신이 묘사하고있는 상황에서 일어나고있는 일입니다. 보고있는 파일은 Mono 또는 .NET CLR에서 직접 실행되는 프로그램에 속하지 않습니다. 대신 모노를 포함하는 기본 코드 프로그램에 속합니다.

Unity 게임 엔진이 모노를 사용하는 방법

주로 C ++로 작성된 Unity 게임 엔진은 시스템 패키지 관리자를 통해 설치된 버전 (있는 경우)을 사용하지 않으며 다른 버전 일 수도 있습니다. 이 내장 모노 런타임은 그 목적이 아니기 때문에 독립형 .NET / Mono 프로그램을 실행하는 데 사용할 수 없습니다. 대신 엔진의 원시 코드 부분이이를 사용하여 CIL 코드를 실행합니다. CIL은 공식 이름 인 Common Intermediate Language 입니다. Microsoft가 원래 개발 한 이후로 이전에 MSIL 또는 Microsoft Intermediate Language라고 불렀습니다. Unity 엔진을 사용하는 게임을 만드는 프로그래머는 일반적으로 C #으로 자체 코드를 작성하지만 일부 다른 언어는 지원됩니다.

Unity 엔진은 Windows에서도 Mono를 포함합니다. 들어 유니버설 윈도우 플랫폼 과 다른 플랫폼 - - 게임 대신 모노의 마이크로 소프트 .NET 프레임 워크를 사용합니다. 그러나 대부분의 모바일 장치 및 게임 콘솔을 비롯하여 대부분의 플랫폼에서 Ubuntu 및 Windows를 포함한 Unity 게임의 대부분은 Mono를 사용합니다. 일부 플랫폼에서는 IL2CPP 를 Mono 대신 사용할 수 있으며 일부 IL2CPP 만 지원됩니다. 자세한 내용은 스크립팅 제한 사항 을 참조하십시오.

.dll우분투에서 파일을 볼 수있는 다른 상황

.dll우분투 에서 파일 을 볼 수있는 두 가지 상황 이 설명되었습니다.

  1. .NET / Mono 애플리케이션에서 사용하기위한 공유 라이브러리. Golboth의 답변 은이를 자세히 설명합니다. 이것이 .dll우분투 시스템에서 가장 많이 보는 것입니다. 폴더 의 .dll파일 이 무엇인지는 아닙니다 GameDataFolder/Managed.
  2. 네이티브 코드 응용 프로그램에 "스크립트"를 제공하기 위해 포함 된 Mono 런타임에서 사용하는 코드를 제공하는 파일입니다. 이것이이 경우에 일어나는 일입니다.

.dll우분투 에서 파일을 볼 수있는 합리적 인 두 가지 다른 경우가 있습니다 .

  1. .NET Core 용 컴파일러 는 컴파일하는 것이 라이브러리가 아닌 경우에도 .dll파일이 아닌 .exe파일을 생성 합니다 . 일반 .NET Framework 또는 Mono가 아닌 .NET Core 런타임 (CoreCLR이라고 함) 이 이러한 파일을 실행합니다. .NET Core는 Microsoft 제품이지만 표준 .NET Framework와 달리 .NET Core는 Ubuntu와 같은 GNU / Linux 시스템 을 공식적으로 지원 하는 크로스 플랫폼 이며 무료 오픈 소스 소프트웨어 입니다.
  2. .dll우분투에서 볼 수 있는 파일은 Windows 라이브러리 일뿐입니다. 프로그램이 Ubuntu 시스템에 저장되어 있지만 Windows에서 실행 중이거나 Ubuntu에 Windows 드라이브를 마운트 한 경우이 오류가 나타날 수 있습니다. Wine 과 함께 제공되거나 winetricks다른 Windows 소프트웨어를 지원하기 위해 자동으로 설치되는 소프트웨어를 포함 하여 Wine을 사용하여 Ubuntu에서 실행할 수있는 프로그램과 관련하여 볼 수도 있습니다 .

이것은 .dll우분투에서 발생할 수있는 모든 상황을 철저히 나열하려는 시도는 아닙니다 . (예를 들어, OS / 2 라이브러리 일 수도 있습니다 .) 그러나이 4 가지 경우가 가장 일반적이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.