2017-02-05 12 views
6

मैं कोशिश कर रहा हूँ के साथ विंडोज के लिए लिनक्स से पार संकलन विंडोज (64 बिट) के लिए लिनक्स (64 बिट) से सी अनुप्रयोगों पार संकलन बजना का उपयोग कर। मैंने page on cross-compilation पढ़ा, जो बहुत उपयोगी नहीं था।बजना

एक साधारण परीक्षण के रूप में, मैं test.c में निम्नलिखित कोड है:

#include <stdio.h> 

int main() 
{ 
     puts("hello world"); 
     return 0; 
} 

मेरे सर्वोत्तम अनुमान अब तक clang -o test -target x86_64-win64-?ABI? test.c है। हालांकि, मुझे नहीं पता कि एबीआई विंडोज 64 बिट क्या उपयोग करता है। जब मैं लक्ष्य ट्रिपल x86_64-win64-abcdefg के साथ क्लैंग चलाता हूं, तो यह ठीक संकलित प्रतीत होता है - यानी, यह त्रुटि के बिना खत्म होता है और कुछ ऐसा होता है जो कुछ हद तक वैध बाइनरी होता है। abcdefg पर विचार करने से यह कोई समझ नहीं आता है, निश्चित रूप से वैध एबीआई नहीं है। परिणामी द्विआधारी इस तरह के एक छोटे से कार्यक्रम के लिए बहुत बड़ा है, और विंडोज़ लगता है कि यह एक 16-बिट प्रोग्राम (???) है। इसे अलग करना "लिनक्स" और "gnu" के संदर्भों को प्रकट करता है, इसलिए ऐसा लगता है कि क्लेंग विंडोज के लिए संकलन करने की भी कोशिश नहीं कर रहा है।

लक्ष्य निर्धारण Win32 (x86_64-win32-???ABI???) निम्न त्रुटि संदेश में परिणाम:

test.c:1:10: fatal error: 'stdio.h' file not found 
#include <stdio.h> 
     ^
1 error generated. 

यह त्रुटि है, अगर मैं गलत नहीं हूँ, यह का परिणाम जहां सिस्टम फ़ाइलों को देखने के लिए जानते हुए भी नहीं है। मुझे लगता है कि क्लैंग कहीं भी विंडोज हेडर फाइलों को स्टोर करता है, क्योंकि यह क्रॉस-कंपाइल करने में सक्षम होने का दावा करता है; पर कहा? यदि ऐसा नहीं होता है, तो क्या कहीं कहीं मैं उन्हें डाउनलोड कर सकता हूं?

सभी आर्किटेक्चर, सिस्टम की एक सूची है, और एबीआई के बजना कहीं का समर्थन करता है? क्रॉस-संकलन पृष्ठ पर सूची व्यापक नहीं है।

पेज भी -mcpu=... उपयोग करने का सुझाव है, लेकिन एक चेतावनी पता चलता है कि पुरानी हो चुकी है। इसके बजाए, चेतावनी की सिफारिश की गई, मैंने -mtune=x86_64 की कोशिश की। ऐसा कोई प्रभाव नहीं पड़ता है। क्या यह आवश्यक है, आर्किटेक्चर को लक्ष्य ट्रिपल में निर्दिष्ट किया गया है?

मैं कुछ साहित्य पता चलता है कि मैं lld, LLVM के प्रयोगात्मक लिंकर की जरूरत है देखा है। क्या यह मामला है? मुझे एलएलडी संकलित करने में कुछ समस्याएं हैं, और यदि संभव हो तो इसे टालना चाहूंगा।

+1

"_If आप एक पैरामीटर है कि बजना blerg की तरह पता नहीं है, चुनते हैं, तो इसे अनदेखा और अज्ञात मान है, जो हमेशा वांछित नहीं है, इसलिए careful._ हो जाएगा" और है कि शायद क्या हुआ जब आप चुना है 'abcdefg' है । – DyZ

+0

@DYZ आह ठीक है, धन्यवाद। अगर केवल वैध पैरामीटर की एक सूची थी या कुछ संदेश यह इंगित करने के लिए कि यह नहीं जानता है! – RogueCSDev

+0

कोई जवाब नहीं, लेकिन मुझे https://github.com/tpoechtrager/wclang मिला - अभी तक यह कोशिश नहीं की है। "लिनक्स/यूनिक्स पर क्लैंग के साथ विंडोज़ के लिए आसानी से क्रॉस संकलन स्रोत कोड" –

उत्तर

1

मैंने अपनी विंडोज़ 10 मशीन पर mobaxterm स्थापित किया है। एक मुफ्त संस्करण है। यह एक xserver प्रदान करता है। इसमें साइगविन की स्थापना है और आप स्थानीय टर्मिनल शुरू कर सकते हैं। आप बस टाइप करें: apt-get इंस्टॉल क्लैंग और क्लैंग संकलित करने के लिए तैयार है और बिना शिकायत के stdio.h पाता है।

लेकिन अगर आप निष्पादन योग्य mobaxterm/cygwin पर नहीं बल्कि खिड़कियों के अंदर ही है, जिसके परिणामस्वरूप चलाना चाहते हैं, आप के बजाय mingwin साथ संकलित करने के लिए की जरूरत है।

संबंधित मुद्दे