Nasıl tüm dağıtımlar ile paylaşmak için linux üzerinde derlemek?

3 Cevap php

"ELF dosyası OS ABI geçersiz:" Ben Fedora Core 12 üzerinde bir PHP uzantısı derlenmiş, ama ben CentOS kullanarak birine göndermek zaman hatası alıyorum

I'm not sure what causes this running file provides the following info: ELF 64-bit LSB shared object, AMD x86-64, version 1 (GNU/Linux), not stripped

An extension that loads fine provides the following from file: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped

Peki ben nasıl olsa yerine bir GNU / LINUX dosyası, bazı dağıtımları için bir SYSV tipi dosyası oluşturmak için hiçbir fikrim gerek görünüyor. Herhangi bir işaretçiler?

Ayrıca ben statik bağlantı olmalıdır?

3 Cevap

Açıklamada: "ELF dosyası OS ABI geçersiz", Application Binary Interface (yani biri may olarak çalışmak değil, ana ve hedef ikilileri karıştırmak için çalışıyor kullanılan ikili arasında olmayan uyumlu olduğu anlamına gelir beklenen). e_ident[EI_OSABI] byte of the ELF başlığı, işletim sistemi / ABI kimlik içerir. Arkadaşının CentOS sistemi ELFOSABI_SYSV (ELFOSABI_NONE veya {[ayarlıyor iken Fedora sistemi ELFOSABI_LINUX (3) bu ayardır (8)]}).

Sen may FreeBSD brandelf programı (derlemek mümkün brandelf.c ) and use it to set the OSABI to ELFOSABI_SYSV (brandelf -f 0 <file> veya brandelf -t SVR4 <file>.

Ben derleme / link zamanda bu değer belirtmek için herhangi bir gcc bayrakları farkında değilim. Ben Fedora sistemi üzerinde gcc tarafından kullanılan Binutils sürümü Linux OSABI belirlemekten sorumlu olduğuna inanıyoruz. O ((ifunc.txt http://groups.google.com/group/generic-abi {[detayları için gördükleri bir STT_GNU_IFUNC sembolü çıktı dosyasında biter eğer linker yalnızca ABI belirten benim anlayış 0)]}).


readelf(1) komutu ELF başlığında saklanan ABI bilgi almak ve görüntülemek için kullanılabilir (readelf -h <file>).


Bu similar question de ilgi çekici olabilir.

Derleyen nesne dosyaları genellikle farklı Linux dağıtımları arasında iyi transferi yok. Farklı Dağıtımları genellikle yüklü olduğunu nasıl depolanmaktadır kütüphaneler konusunda farklı politikaları, var.

Aralarında çok farklılıklar (hatta Fedora ve RedHat / CentOS, evet) var. Onlar her düzeyde (çekirdek, PHP, kütüphane yer) de bileşenlerden kendi yamalar sağlamak olasıdır. Onlar dağıtım PHP paketini kullanarak ediyorsanız, dağıtım daha iyi onların sisteme intergrate yamalı olabilir.

Büyük olasılıkla içine kaçıyorum büyük sorun dağıtım farklı kütüphaneler / derleyici ayarları kullanılmış olması. Gcc Verision kendi bilgisayarında ne olduğunu görmek ve senin üzerinde ne karşılaştırmak için kontrol edin. (Fedora 12 CentOS daha epeyce yeni kütüphaneler vardır). Lütfen sorun olabilir orası.

Başka bir olası sorun, ikili gayet iyi olduğunu, ancak onu kullanan tüm kütüphaneleri ile uyumsuz. Ben hedef dağılımı (veya varient) üzerinde derleme olmadan bu birinin etrafında almak için iyi bir yol varsa emin değilim. Sen her ne paylaşımlı nesne / yürütülebilir kütüphaneleri lld <file> komutunu kullanarak kullanır görebilirsiniz.

Ayrıca, hata daha önce herhangi bir çıkış vardı ELF file OS ABI invalid? Ben başvurulan görmek Çoğu yerde bundan daha fazla bilgi var.

Bu sizin arkadaşınız 64-bit sistemi çalıştıran olmadığını büyük olasılıkla bulunuyor. ELF Linux yürütülebilir için standart bir format, ancak 32-bit sistemler 64-bit çalıştırılabilir dosyaları çalıştırmak edemez.

Arkadaşından uname -a için çıkış alın. Çıkışı "x86_64" içermiyorsa, o CentOS 32-bit sürümünde bulunuyor.

Eğer öyleyse, 32-bitlik ikililer derlemek için çapraz derleme ortamı, ya da bir sanal makine kurmak gerekir, ya bunu kendisi derlemek böylece sadece kaynaklar ile arkadaş sağlar.