名前は?で終わると、通常のLinuxバイナリを実行できないようです。.exe
理由は何ですか?
$ cp /bin/pwd pwd
$ ./pwd
/home/premek
いいですね。しかし...
$ cp /bin/pwd pwd.exe
$ ./pwd.exe
bash: ./pwd.exe: No such file or directory
$ ls -la pwd.exe
-rwxr-xr-x 1 premek premek 39616 May 3 20:27 pwd.exe
$ file pwd.exe
pwd.exe: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2447335f77d6d8c4245636475439df52a09d8f05, stripped
$ ls -la /lib64/ld-linux-x86-64.so.2
lrwxrwxrwx 1 root root 32 May 1 2019 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
$ ls -la /lib/x86_64-linux-gnu/ld-2.28.so
-rwxr-xr-x 1 root root 165632 May 1 2019 /lib/x86_64-linux-gnu/ld-2.28.so
$ file /lib/x86_64-linux-gnu/ld-2.28.so
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
答え1
私はこの問題について一日を過ごしましたが、もちろんこの質問を投稿してから1秒後にワイン用の.exeファイルを登録するために、次のことが思い出されました。
$ sudo cat /proc/sys/fs/binfmt_misc/wine
enabled
interpreter /usr/bin/wine
flags:
extension .exe
存在しません/usr/bin/wine
。
私は以下を使用してそれを削除しました。
$ sudo update-binfmts --remove wine /usr/bin/wine
update-binfmts: warning: no executable /usr/bin/wine found, but continuing anyway as you request
今大丈夫
答え2
Linuxを含むほとんどのUN * Xesは、ファイルの先頭またはその近くに表示される「Magic Number」で、デフォルトの実行可能ファイル(Linuxを含むほとんどの最新のUN * Xesの場合はELFファイル)を識別します。
Windows バイナリは次の場所にあります。移植可能な実行可能ファイル形式、魔法の数もあります - ファイルはスタブMS-DOS実行可能ファイルから始まります。文字「MZ」を含むマジックナンバーで始まります。、そして変数オフセットを持つ別々の「PE」マジックナンバーもあります。
~によるとbinfmt_miscのkernel.orgドキュメント、binfmt_miscルールは、ファイル拡張子ではなくファイルの内容(マジックナンバーなど)に基づいている場合があります。彼らが提供するワインルールの例は次のとおりです。
:DOSWin:M::MZ::/usr/local/bin/wine:
Wineがインストールされていないので、ルールを完全に削除するのが正しい修正です。 Wineをインストールしたことがある場合するLinuxバイナリと同じ方法でWindowsバイナリを実行するには、カーネルに.exeで終わるすべてのエントリがWindows実行可能ファイルであると仮定するように指示するルールの代わりに、サンプルルールと同様のルールを使用する必要があります。