Saya tahu ada pertanyaan serupa di luar sana, tetapi saya belum menemukan solusi atau kasus yang tepat ini. Biner dibangun di Arch Linux menggunakan GCC 4.7-nya. Paket ini berfungsi dengan baik pada sistem build. Perintah di bawah ini dijalankan pada:
Linux vbox-ubuntu 3.2.0-29-generic # 46-Ubuntu SMP Jumat 27 Jul 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux
File yang dimaksud terletak di sini . Ini adalah Linux 64-bit untuk Windows 64-bit cross-compiler. Batalkan untarring untuk ~/
memberikan ~/mingw64
direktori tunggal yang berisi semua yang dibutuhkan.
Ketika saya mencoba menjalankan ~/mingw64/x86_64-w64-mingw32/bin/as
inilah yang saya dapatkan:
bash: /home/ruben/mingw64/x86_64-w64-mingw32/bin/as: No such file or directory
Berlari file ~/mingw64/x86_64-w64-mingw32/bin/as
memberi saya:
/home/ruben/mingw64/x86_64-w64-mingw32/bin/as: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x0b8e50955e7919b76967bac042f49c5876804248, not stripped
Berlari ldd ~/mingw64/x86_64-w64-mingw32/bin/as
memberi saya:
linux-vdso.so.1 => (0x00007fff3e367000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2ceae7e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2ceaac1000)
/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f2ceb0a8000)
Saya benar-benar bingung. Bantuan apa pun sangat kami hargai.
EDIT : Beberapa detail lebih lanjut: Sistem build adalah Arch Linux (saat ini glibc 2.16). Output dari ls -l
adalah:
-rwxr-xr-x 2 ruben users 1506464 11 aug 23:49 /home/ruben/mingw64/bin/x86_64-w64-mingw32-as
Output dari objdump -p
adalah:
Version References:
required from libz.so.1:
0x0827e5c0 0x00 05 ZLIB_1.2.0
required from libc.so.6:
0x0d696917 0x00 06 GLIBC_2.7
0x06969194 0x00 04 GLIBC_2.14
0x0d696913 0x00 03 GLIBC_2.3
0x09691a75 0x00 02 GLIBC_2.2.5
Output dari ldd -v
pada Ubuntu 12.04 adalah:
linux-vdso.so.1 => (0x00007fff225ff000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd525c71000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd5258b4000)
/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fd525e9b000)
Version information:
/home/ruben/mingw64/x86_64-w64-mingw32/bin/as:
libz.so.1 (ZLIB_1.2.0) => /lib/x86_64-linux-gnu/libz.so.1
libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libz.so.1:
libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
OS lain yang diuji adalah Fedora 17 (glibc 2.15) dan Ubuntu 12.04 (eglibc 2.15). Persyaratan versi zlib dan glibc terpenuhi.
Jawaban:
Jika saya menjalankan
ldd -v as
sistem saya, saya mendapatkan:Jadi ya, sepertinya binari-binari ini mencari
GLIBC_2.14
simbol, yang mungkin Anda lewatkan pada sistem Anda. Seperti yang ditunjukkan oleh svenx, sepertinyamemcpy@@GLIBC_2.14
simbol itu sedang dicari . Beberapa informasi lebih lanjut tentang mengapamemcpy
diberi versi baru dijelaskan dalam laporan bug ini .Menginstal versi baru
glibc
pada sistem target Anda harus memperbaikinya. Jika Anda ingin mencoba membangun kembali biner agar tetap berfungsi pada versi lamaglibc
, Anda bisa mencoba trik seperti yang tercantum di sini . Anda mungkin juga bisa bertahan dengan shim yang hanya menyediakan versi spesifik darimemcpy
simbol yang Anda butuhkan, tetapi itu akan menjadi sedikit berantakan.Setelah membaca pembaruan Anda: Anda benar, itu bukan masalah Anda. Tapi saya rasa saya sudah menemukannya: biner Anda meminta penerjemah
/lib/ld-linux-x86-64.so.2
, yang tidak ada di sistem Ubuntu 12.04:Meskipun
ldd
tahu untuk menemukannya/lib64
, saya kira kernel tidak tahu bahwa ketika mencoba menjalankan biner dan tidak dapat menemukan penerjemah yang diminta file. Anda dapat mencoba menjalankannya melalui interpreter secara manual:Saya tidak 100% yakin ini berfungsi dengan benar - pada sistem saya, menjalankan
gcc
cara ini memberikan kesalahan segmentasi. Tapi itu setidaknya masalah yang berbeda.sumber
:(
/lib64
menggunakan amd64, dan tampaknya Arch secara manual menambal sumber gcc mereka untuk mengubah ini, sehingga menjamin ketidakcocokan dengan setiap distribusi Linux lainnya di luar sana. Lihat komentar laporan bug ini untuk alasan aneh mereka. Bagi saya, ini akan menjadi tanda peringatan yang jelas untuk menjauh dari Arch Linux.patchelf
berhasil untuk mereka.Masalah Anda adalah varian dari Mendapatkan pesan "Tidak ditemukan" ketika menjalankan biner 32-bit pada sistem 64-bit : Anda memiliki executable yang menyebutkan loader dinamis yang tidak ada.
Dalam kasus Anda, pemuat dinamis
/lib/ld-linux-x86-64.so.2
ada tetapi di lokasi yang berbeda/lib64/ld-linux-x86-64.so.2
. Cara paling sederhana untuk membuat program Anda berfungsi adalah dengan membuat tautan simbolik:sumber