Windows'da bağlanacak nesne dosyaları oluşturmak için Linux'ta Intel C / C ++ derleyicisini kullanmak mümkün müdür?


12

Neden?

Kaynağınıza bağlı olarak Intel derleyicisi büyük olasılıkla veya kesinlikle x86 mimarisi için en hızlı yürütülebilir dosyaları üretir (% 5 ila% 100 yürütme süresi iyileştirmesi).

Intel, Linux için derleyicilerini ticari olmayan bir lisans altında sunuyor (Bence, sayfalarında bir yerde ücretsiz olduğunu düşünüyorum: Intel - Ticari Olmayan Yazılım Geliştirme ). Öğrenciler için ücretsiz bir ticari olmayan lisans da vardır, ancak her üç ana işletim sistemi için araçlar sunulmasına rağmen (lisans kısıtlaması nedeniyle bağlantı kesildi) bu lisans geçerli değildir.

Hedef

Ben (öğrenci olmayan biri olarak), Windows (ve muhtemelen işletim sistemi için çalıştırılabilir dosyalar ve dinamik bağlantı kitaplıkları oluşturmak üzere bağlanabilecek nesne dosyalarını derlemek için ticari olmayan lisans altındaki olası yürütme hızı geliştirmeleri için Intel derleyicilerini kullanabilmek istiyorum X)

Daha fazla detay:

Ne olayla bu belgede, Intel derleyiciler platformunun baskın derleyicilere uyumlu nesne dosyaları oluşturmak olmasıdır.

Alt sorular:

  1. Windows ve Linux'ta (mevcut sürümler) gcc, g ++, cl, mingw32, icc, icpc ve icl nesne dosyası biçimleri nelerdir?
  2. Mingw32 çapraz derleyici araç zincirinin parçaları hedefe ulaşmak için kullanılabilir mi?
  3. Oluşturulan nesne dosyalarındaki meta verilerin ana sorun olması doğru mudur?

ad 2:
mingw32-objcopy, Linux üzerindeki Intel derleyici çıktısını (muhtemelen ELF) Microsoft uyumlu COFF'a (yeniden yerleştirilebilir nesne dosyaları hariç) dönüştürebiliyor gibi görünüyor. Birisi bunun gerçekten işe yaradığını doğrulayabilir mi (önemsiz uygulamalar için), lütfen?


1
+1. İlginç soru.
Neil

Şaraba baktınız mı? AFAIK, Wine, Linux üzerinde Windows yürütülebilir dosyaları oluşturabilen bir araç zinciri sağlar; büyük olasılıkla icc ile bu kadar kanca olabilir. Şarap içinde bir Windows icc çalıştırmak ve ming32 çapraz derleme araç zinciriyle bağlamak biraz başarı olabilir. Denemedim, ama yeterince uğraşarak, bunun mümkün olması gerektiğini düşünüyorum.
tdammers

@tdammers WineHQ'ya göre, Linux'ta Windows yürütülebilir dosyaları oluşturmak için kullanılan araç zinciri, yanılmıyorsam mingw32.
Hugo

Intel forumlarından yanıt "hayır" gibi görünüyor: software.intel.com/en-us/forums/topic/282588
Vitor Py

@VitorBraga Soruyu şu şekilde yorumladım: "Intel Derleyici doğrudan çapraz derleme yapabiliyor mu?" Cevap "Hayır" (anlayabildiğim kadarıyla gerekli seçenekler ve kütüphaneler eksik), ama ... bilgisayar mimarisi (IA32, AMD64) benim durumumda aynı olurdu ve sadece Windows kütüphanelerini kullanırsam Linux'ta programı derlemek için Windows'ta çalıştırılabilecek yürütülebilir kod almayı beklerim - Windows kitaplıklarıyla bağlantılıysa bir Windows yürütülebilir dosyası oluşturmak için.
Hugo

Yanıtlar:


1

Çapraz derleyici kullanarak bir Linux derleme makinesinde Windows yürütülebilir dosyaları oluşturmak mümkündür. Ancak, Intel bu tür çapraz derleyiciler sağlamaz.

Alt soruları cevaplamak için:

Windows ve Linux'ta (mevcut sürümler) gcc, g ++, cl, mingw32, icc, icpc ve icl nesne dosyası biçimleri nelerdir?

Nesne dosyalarının formatı, işletim sistemi (ya da daha doğrusu onu oluşturmak için kullanılan derleyici) tarafından etkin bir şekilde belirlenir. Windows için bu Taşınabilir Yürütülebilir (PE) biçimdir ve Linux için ELF biçimidir.

Mingw32 çapraz derleyici araç zincirinin parçaları hedefe ulaşmak için kullanılabilir mi?

Hayır. İlgili bölüm, hem doğru nesne biçimini oluşturmaktan sorumlu olan hem de Intel derleyicilerinde oluşturulan kodlarına hız kenarı veren bölüm olan kod üreticisidir.

Oluşturulan nesne dosyalarındaki meta verilerin ana sorun olması doğru mudur?

Hayır. Bu bir sorun, ama dahası da var. Daha temel bir sorun, parametrelerin çekirdeğe ve / veya standart kütüphaneye aktarılmasındaki potansiyel farktır. IIRC, bu sözleşmeler Windows ve Linux arasında farklıdır.


0

Cevap neredeyse kesinlikle evet. Linux kutusunda çapraz derleme yapan Windows ikili dosyalarını ( mingw32 aracılığıyla ) gcc kullanarak kolayca mümkün olduğunu biliyorum - tabii ki programı Linux'ta çalıştıramayacaksınız (Wine altında çalışmadığı sürece), ancak birkaç program biliyorum Windows ikili dosyaları bu şekilde.

Ancak, Intel derleyicisinin bunun için seçenekleri olup olmadığını bilmiyorum, öyle olduğunu düşünmeliyim.

Windows için nesne formatı PE , Linux için ise ELF'dir .


Göre msdn : "derleyiciler ortak nesne dosyası biçimi (COFF) nesne (obj) dosyaları üretmek." <br/>
Hugo

Tamam, bu işe yaramadı. Wikipedia'ya göre PE, COFF'dan türetilmiştir ve her iki dosya biçimi de nesne dosyası biçimi ve yürütülebilir dosya biçimi olarak kullanılabilir.
Hugo

0

Microsoft'un özel arama kurallarını kullanan hiçbir şeye (doğrudan) bağlanan C kodu ile MinGW'leri kullanma şansınız olabilir objcopy. Birleştirilmiş bir nesne dosyasını dönüştürmek için kullandım, ancak daha sonra kuralları çağırmak için endişelenmem gerekmedi.

Ben sadece tam olarak ne istediğinizi yapmak için GCC veya clang almak yerine bunu yapmaya çalışacağınız zaman harcamak istiyorum. Böyle bir hızlanma gerçekten önemliyse, bir Linux ikili dosyasını Intel derleyicisiyle derleyin ve tam olarak ne olduğunu, ne olursa olsun, kodunuzu hızlandırdığını görmeye çalışın. Her şey başarısız olursa montajı yamalayabilirsiniz.


0

Aşağıdaki cevabı öneriyorum:

Kesin bir (belki evet'e yaslanmış) ile ama bağlamıyla ilgili.

Açıklama: "Eğilerek" kısmı ile ilgili olarak: Bunu denemek için tam bir zaman kaybı gibi görünmüyor, ancak ("put" kısmı) bu yanıtı göz önünde bulundurarak muhtemelen bir Intel'e kıyasla yürütme süresi iyileştirmelerini alamayacaksınız - sadece alet zinciri. İlgili bölüm derleyiciye bağlayıcı ve çalışma zamanı geri bildirimi (tüm program optimizasyonu, profil güdümlü optimizasyon, link-time kod üretimi).

Ek ayrıntı: MinGW SSS
göre kitaplık ve DLL kullanma ile ilgili olası sorunlar vardır: "dlls farklı Windows derleyiciler arasında oldukça taşınabilir olması gerekiyor olsa da, bir kütüphane dosyası (.lib veya .a) üzerinden dlls erişmek değil. dosya biçimleri belirli derleyicilere özgüdür ve derleyici destek sağlamadığı sürece farklı derleyicilerle taşınabilir olarak kullanılamaz. "

Cevabı tamamlamak için:
alt soru 1:

Windows ve Linux'ta (mevcut sürümler) gcc, g ++, cl, mingw32, icc, icpc ve icl nesne dosyası biçimleri nelerdir?

Windows üzerinde herhangi bir derleyici için varsayılan nesne dosyası biçimi COFF'dur (büyük olasılıkla PE değişkeni). Linux'taki herhangi bir derleyici için varsayılan nesne dosyası formatı ELF'dir

alt soru 2:

Mingw32 çapraz derleyici araç zincirinin parçaları hedefe ulaşmak için kullanılabilir mi?

Büyük olasılıkla evet (bağlantı kısmı için), ancak büyük olasılıkla çok fazla yürütme süresi iyileştirmesi alamazsınız.

alt soru 3:

Oluşturulan nesne dosyalarındaki meta verilerin ana sorun olması doğru mudur?

Bağlantı ile ilgili: evet.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.