เป็นไปได้ไหมที่จะใช้คอมไพเลอร์ Intel C / C ++ บน Linux เพื่อสร้างไฟล์ออบเจ็กต์ที่จะเชื่อมโยงกับ Windows


12

ทำไม?

ขึ้นอยู่กับแหล่งที่มาของคุณคอมไพเลอร์ของ Intel น่าจะเป็นหรือคอมไพเลอร์ที่สร้างไฟล์ปฏิบัติการที่เร็วที่สุดสำหรับสถาปัตยกรรม x86 (ปรับปรุง 5 ถึง 100% เวลาในการประมวลผล)

Intel เสนอคอมไพเลอร์สำหรับ Linux ภายใต้ใบอนุญาตที่ไม่ใช่เชิงพาณิชย์ฟรี (ฉันคิดว่าฉันอ่านมันฟรีที่ใดที่หนึ่งบนหน้าเว็บของพวกเขา: Intel - การพัฒนาซอฟต์แวร์ที่ไม่ใช่เชิงพาณิชย์ ) นอกจากนี้ยังมีใบอนุญาตที่ไม่ใช่เชิงพาณิชย์สำหรับนักเรียนฟรี แต่ใบอนุญาตนี้ไม่สามารถใช้ได้แม้ว่าจะมีเครื่องมือสำหรับระบบปฏิบัติการหลักทั้งสาม (การเชื่อมโยงหลุดเนื่องจากข้อ จำกัด ด้านชื่อเสียง)

เป้าหมาย

ฉัน (ในฐานะนักเรียนที่ไม่ใช่นักศึกษา) ต้องการใช้คอมไพเลอร์ของ Intel สำหรับการปรับปรุงความเร็วในการดำเนินการที่เป็นไปได้ภายใต้ใบอนุญาตที่ไม่ใช่เชิงพาณิชย์เพื่อรวบรวมไฟล์วัตถุที่สามารถเชื่อมโยงเพื่อสร้างไฟล์ประมวลผลและไลบรารีลิงค์แบบไดนามิกสำหรับ Windows X)

รายละเอียดเพิ่มเติม:

สิ่งที่ฉันอนุมานจากเอกสารนี้คือคอมไพเลอร์ Intel สร้างออบเจ็กต์ไฟล์ที่เข้ากันได้กับคอมไพเลอร์ที่โดดเด่นของแพลตฟอร์ม

Sub-คำถาม:

  1. รูปแบบไฟล์ออบเจ็กต์ของ gcc, g ++, cl, mingw32, icc, icpc, และ icl บน Windows และ Linux คืออะไร (เวอร์ชั่นปัจจุบัน)?
  2. สามารถใช้ชิ้นส่วนของ mingw32 cross-compiler toolchain เพื่อให้บรรลุเป้าหมายได้หรือไม่?
  3. ฉันถูกต้องหรือไม่ว่าข้อมูลเมตาในไฟล์วัตถุที่สร้างเป็นปัญหาหลัก

โฆษณา 2:
mingw32-objcopy ดูเหมือนว่าจะสามารถแปลงเอาท์พุทคอมไพเลอร์ของ Intel บน Linux (สันนิษฐานว่าเอลฟ์) เป็น COFF ที่เข้ากันได้กับ Microsoft (ด้วยข้อยกเว้นที่เป็นไปได้ของไฟล์อ็อบเจ็กต์ที่เปลี่ยนตำแหน่งได้) มีคนยืนยันได้ไหมว่านี่ใช้งานได้จริง (สำหรับแอปพลิเคชันที่ไม่สำคัญ) โปรด


1
+1 คำถามที่น่าสนใจ
Neil

คุณเคยดูไวน์หรือยัง AFAIK, Wine มี toolchain ที่สามารถสร้างโปรแกรมปฏิบัติการ Windows บน Linux; ค่อนข้างเป็นไปได้ว่าคุณสามารถขอ ICC ได้ คุณอาจประสบความสำเร็จในการเรียกใช้ icc ของ Windows ภายใน Wine และขอให้ดำเนินการด้วยเครือข่ายการรวบรวมข้าม ming32 ฉันไม่ได้ลอง แต่พอเล่นซอฉันคิดว่ามันควรจะเป็นไปได้
tdammers

@tdammers ตามWineHQ toolchain เพื่อสร้างไฟล์ปฏิบัติการ Windows บน Linux คือ mingw32 ถ้าฉันไม่เข้าใจผิด
Hugo

จากฟอรัม Intel คำตอบดูเหมือนจะเป็น "ไม่": software.intel.com/en-us/forums/topic/282588
Vitor Py

@VitorBraga ฉันตีความคำถามเช่นนี้: "Intel Compiler สามารถที่จะทำการคอมไพล์ได้โดยตรงหรือไม่" คำตอบคือ "ไม่" (ไม่มีตัวเลือกและไลบรารีที่จำเป็นเท่าที่ฉันจะบอกได้) แต่ ... สถาปัตยกรรมคอมพิวเตอร์ (IA32, AMD64) จะเหมือนกันในกรณีของฉันและถ้าฉันใช้ไลบรารี Windows เท่านั้น เพื่อรวบรวมโปรแกรมใน Linux ฉันคาดว่าจะได้รับรหัสปฏิบัติการที่สามารถดำเนินการใน Windows - หากเชื่อมโยงกับห้องสมุด Windows เพื่อสร้างปฏิบัติการ Windows
Hugo

คำตอบ:


1

เป็นไปได้ที่จะสร้างไฟล์ปฏิบัติการ Windows บนเครื่องสร้างลินุกซ์โดยใช้ cross-compiler แต่ Intel ไม่ได้ให้คอมไพเลอร์ข้ามเช่นนั้น

ในการตอบคำถามย่อย:

รูปแบบไฟล์ออบเจ็กต์ของ gcc, g ++, cl, mingw32, icc, icpc, และ icl บน Windows และ Linux คืออะไร (เวอร์ชั่นปัจจุบัน)?

รูปแบบสำหรับอ็อบเจ็กต์ไฟล์ถูกกำหนดอย่างมีประสิทธิภาพโดยระบบปฏิบัติการ (หรือมากกว่าคอมไพเลอร์ที่ใช้ในการสร้าง) สำหรับ Windows นี่เป็นรูปแบบ Portable Executable (PE)และสำหรับ Linux รูปแบบELF

สามารถใช้ชิ้นส่วนของ mingw32 cross-compiler toolchain เพื่อให้บรรลุเป้าหมายได้หรือไม่?

ไม่ส่วนที่เกี่ยวข้องคือตัวสร้างโค้ดซึ่งเป็นส่วนที่รับผิดชอบในการสร้างรูปแบบวัตถุที่ถูกต้องและส่วนหนึ่งในคอมไพเลอร์ของ Intel ที่ให้รหัสความเร็วที่สร้างขึ้น

ฉันถูกต้องหรือไม่ว่าข้อมูลเมตาในไฟล์วัตถุที่สร้างเป็นปัญหาหลัก

ไม่มันเป็นปัญหาเดียว แต่ยังมีอีกมาก ปัญหาพื้นฐานมากขึ้นคือความแตกต่างที่เป็นไปได้ในวิธีที่พารามิเตอร์ถูกส่งผ่านไปยังเคอร์เนลและ / หรือไลบรารีมาตรฐาน IIRC อนุสัญญาเหล่านั้นแตกต่างกันระหว่าง Windows และ Linux


0

คำตอบคือใช่แน่นอน ฉันรู้ว่าการคอมไพล์ Windows ข้ามคอมไพล์ (ผ่านmingw32 ) บนกล่อง Linux เป็นไปได้อย่างง่ายดายโดยใช้ gcc - เห็นได้ชัดว่าคุณจะไม่สามารถเรียกใช้โปรแกรมบน Linux (เว้นแต่จะทำงานภายใต้ Wine) แต่ฉันรู้ว่าหลายโปรแกรม Windows ไบนารีด้วยวิธีนี้

อย่างไรก็ตามฉันไม่รู้ว่าคอมไพเลอร์ของ Intel มีตัวเลือกสำหรับสิ่งนี้หรือไม่ฉันควรคิดว่ามันเป็นเช่นนั้น

รูปแบบวัตถุสำหรับ Windows เป็นPE , ในขณะที่สำหรับลินุกซ์ของเอลฟ์


ตามmsdn : "คอมไพเลอร์สร้างไฟล์ Common Object Format Format (COFF) ไฟล์ (.obj)" <br/>
Hugo

ตกลงนั่นไม่ได้ผล ตามที่ Wikipedia PE ได้รับมาจาก COFF และทั้งสองรูปแบบไฟล์สามารถใช้เป็นรูปแบบไฟล์วัตถุและรูปแบบไฟล์ที่ปฏิบัติการได้
Hugo

0

ด้วยรหัส C เชื่อมโยงไปยังไม่มีอะไร (โดยตรง) ที่ใช้กำหนดเองไมโครซอฟท์เรียกประชุมคุณอาจจะมีโอกาสใช้ objcopyMinGW ฉันใช้มันเพื่อแปลงไฟล์ออบเจ็กต์ที่ประกอบขึ้นมา แต่จากนั้นฉันก็ไม่ต้องกังวลกับการเรียกอนุสัญญา

ฉันแค่ใช้เวลาที่คุณพยายามทำสิ่งนี้แทนที่จะได้รับ GCC หรือเสียงดังกราวเพื่อทำสิ่งที่คุณต้องการ ถ้าการเร่งความเร็วนั้นสำคัญมากที่ต้องรวบรวมไบนารีของลินุกซ์กับคอมไพเลอร์ของ Intel และลองดูว่าหากมีอะไรมันจะเร่งโค้ดของคุณ คุณสามารถแก้ไขชุดประกอบหากสิ่งอื่นล้มเหลว


0

ฉันเสนอคำตอบต่อไปนี้:

อาจจะแน่นอน (โน้มตัวไปทางใช่) โดยมี แต่เกี่ยวกับบริบท

คำอธิบาย: เกี่ยวกับส่วน "เอนตัว": ดูเหมือนจะไม่เสียเวลาทั้งหมดที่จะลองทำ แต่ (ส่วน "ใส่") โดยคำนึงถึงคำตอบนี้คุณน่าจะไม่ได้รับการปรับปรุงเวลาดำเนินการเปรียบเทียบกับ Intel Toolchain เท่านั้น ส่วนที่เกี่ยวข้องคือตัวเชื่อมโยงและข้อเสนอแนะรันไทม์ไปยังคอมไพเลอร์ (การเพิ่มประสิทธิภาพโปรแกรมทั้งหมด, การเพิ่มประสิทธิภาพแนะนำโปรไฟล์, การสร้างรหัสลิงค์เวลา)

รายละเอียดเพิ่มเติม:
จากคำถามที่พบบ่อยของ MinGWมีปัญหาที่เป็นไปได้กับการใช้ไลบรารีและ DLLs:
"แม้ว่าDLLs ควรจะพกพาได้อย่างสะดวกในคอมไพเลอร์ Windows ที่ต่างกันการเข้าถึงDLLs ผ่านไฟล์ไลบรารี (.lib หรือ. a) รูปแบบไฟล์มีความเฉพาะเจาะจงสำหรับคอมไพเลอร์โดยเฉพาะและไม่สามารถใช้งานได้กับคอมไพเลอร์ที่แตกต่างกันเว้นแต่คอมไพเลอร์จะให้การสนับสนุน "

เพื่อให้คำตอบให้สมบูรณ์:
คำถามย่อย 1:

รูปแบบไฟล์ออบเจ็กต์ของ gcc, g ++, cl, mingw32, icc, icpc, และ icl บน Windows และ Linux คืออะไร (เวอร์ชั่นปัจจุบัน)?

รูปแบบไฟล์วัตถุเริ่มต้นสำหรับคอมไพเลอร์ใด ๆ บน Windows คือCOFF (น่าจะเป็นตัวแปรPE ) รูปแบบไฟล์วัตถุเริ่มต้นสำหรับคอมไพเลอร์ใด ๆ บน Linux คือELF

คำถามย่อย 2:

สามารถใช้ชิ้นส่วนของ mingw32 cross-compiler toolchain เพื่อให้บรรลุเป้าหมายได้หรือไม่?

เป็นไปได้มากว่าใช่ (สำหรับส่วนเชื่อมโยง) แต่ส่วนใหญ่คุณจะไม่ได้รับการปรับปรุงเวลาดำเนินการมากนัก

คำถามย่อย 3:

ฉันถูกต้องหรือไม่ว่าข้อมูลเมตาในไฟล์วัตถุที่สร้างเป็นปัญหาหลัก

เกี่ยวกับการเชื่อมโยง: ใช่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.