2009-01-09 17 views
9

मैं एक प्रोग्राम बना रहा हूं जो प्लगइन का उपयोग करता है। दुर्भाग्यवश, प्लगइन ढांचे की गतिशील लिंकिंग मेरे प्रोजेक्ट EXE और बीपीएल संस्करणों में आरटीएल और वीसीएल को मजबूर करती है, और उनके पास डीबग जानकारी सक्षम नहीं है।मेरी इकाइयां मेरी फाइलों के "एक अलग संस्करण के साथ संकलित" क्यों हैं?

इसलिए मैंने एक परीक्षण ढांचा बनाया जो मेरे प्लगइन से स्थिर रूप से लिंक करता है, इसलिए मैं वास्तव में देख सकता हूं कि कोड के माध्यम से पता लगाने के दौरान मैं क्या कर रहा हूं। लेकिन अब, हर बार जब मैं पुन: संकलित करने की कोशिश करता हूं, मुझे एक त्रुटि मिलती है: "यूनिट turbu_skills को turbu_database.GDatabase के एक अलग संस्करण के साथ संकलित किया गया था"

मैंने पहले यह त्रुटि देखी है, लेकिन केवल तभी जब मैं चीजों को बदल रहा हूं मुझे शायद आरटीएल या वीसीएल पुस्तकालयों की तरह नहीं होना चाहिए था। मुझे समझ में नहीं आता कि यह मेरे अपने कोड के साथ क्यों कर रहा है। Turbu_skills और turbu_database इकाइयां दोनों इकाइयां हैं जिन्हें मैंने स्वयं लिखा था। GDatabase एक वैश्विक सिंगलटन वैरिएबल है, जिसकी कक्षा परिभाषा मैंने सप्ताहों में नहीं बदला है। कोई भी परिवर्तन जो एक पुनर्मूल्यांकन को ट्रिगर करता है, इस त्रुटि का कारण बनता है, भले ही मैंने किसी भी इकाई में कुछ भी छुआ नहीं है।

पूर्ण निर्माण (SHIFT-F9) करने से यह सही ढंग से संकलित हो जाता है। लेकिन अगर मैं एक इकाई (किसी भी इकाई) में स्पेस दबाएं और F9 दबाएं, तो मुझे फिर से त्रुटि मिल जाएगी। क्या हो रहा है और मैं इसे कैसे रोकूं? यह मुख्य ऐप में नहीं होता है, केवल परीक्षण ढांचे।

संपादित करें: मेरे पास मेरी सभी इकाइयों का स्रोत है। डीसीयू और इसी तरह की फाइलों को हटाने से मदद नहीं मिलती है। पूरे प्रोजेक्ट को एक अलग कंप्यूटर पर कॉपी करना, सभी डीसीयू को हटाना, और वहां निर्माण करना मदद नहीं करता है। मेरे कार्यक्रम और कंपाइलर के लेआउट के बीच एक उद्देश्य, पुनरुत्पादित संघर्ष है, और मैं इससे छुटकारा पाना चाहता हूं।

स्रोत http://www.turbu-rpg.com/downloads/Turbu_source_setup.exe पर पाया जा सकता है यदि कोई इसका परीक्षण करना चाहता है। इसे पहले से स्थापित जेवीसीएल के साथ डेल्फी 200 की आवश्यकता है; इंस्टॉलर पैकेज बाकी का ख्याल रखेगा। शायद स्रोत कोड उपलब्ध होने से किसी को इसे ट्रैक करने में मदद मिलेगी। मुझे निश्चित रूप से उम्मीद है, क्योंकि जहां भी मुद्दा है, यह मेरे बाहर है। समस्या test.exe में और turbu.grouppro में turbu.exe में भी मिल सकती है।

संपादित करें 2: यह एक और क्रॉस-यूनिट जेनेरिक मुद्दा था। Grr। मैं एक कामकाज कोड करने में कामयाब रहे। मुझे उम्मीद है कि वे जल्द ही जेनरिक समस्याओं को ठीक करेंगे।

+2

आपको शायद आसपास के काम के साथ एक उत्तर लिखना चाहिए। यह अन्य समस्याओं की मदद करेगा जो एक ही समस्या में ठोकर खाएंगे। –

+0

EDIT 2 के लिए धन्यवाद, मुझे लगता है कि मैं यहाँ कुछ बर्बाद घंटे पहले आ सकता था ... – Wodzu

+1

@ मेसन व्हीलर - 12 अलग-अलग उत्तरों! यह स्पष्ट रूप से आश्चर्यजनक है कि खोज/पुस्तकालय पथ से संबंधित कितने लोगों (सभी प्रकार की) समस्याएं हैं। Embarcadero ने यह समझाया बहुत बहुत ही खराब काम किया! – Ampere

उत्तर

16

त्रुटि "यूनिट को एक अलग संस्करण के साथ संकलित किया गया है ..." एक परेशान है। यह नीचे की तरह एक स्थिति में होता है:

 +--------+ 
    | unit A | 
    +--------+ 
     |  | 
     |  | 
     V  | 
    +--------+ | 
    | unit B | | 
    +--------+ | 
     |  | 
     |  | 
     V  V 
    +--------+ 
    | unit C | 
    +--------+ 

दोनों यूनिट ए और बी उपयोग इकाई सी और इकाई बी का उपयोग करता है सी यूनिट बी और सी संकलित कर रहे हैं और किसी कारण से इकाई बी के स्रोत उपलब्ध नहीं है। अब यूनिट सी बदल दिया गया है (कोई भी परिवर्तन करेगा और पुन: संकलित किया जाएगा) और इकाई सी का डीसीयू यूनिट बी द्वारा उपयोग की जाने वाली यूनिट सी से भिन्न होता है, इसलिए यूनिट बी को भी पुनः संयोजित करने की आवश्यकता होती है। लेकिन दुर्भाग्यवश, स्रोत उपलब्ध नहीं है इसलिए संकलक छोड़ देता है।

यह पूरी तरह से स्पष्ट नहीं है कि आपकी स्थिति में क्या गलत है।

आपके पास एक परीक्षण ढांचा है जो प्लगइन से लिंक करता है। तो यूनिट एक्स और वाई फिट बैठते हैं और क्या आप ऊपर दिखाए गए पैटर्न को पहचानते हैं?

लेकिन तथ्य यह है कि एक पूर्ण निर्माण समस्या हल करता है इस दिशा में संकेत है। और यह पहली बार नहीं है जब मैंने आंशिक recompiles के साथ समस्याओं को देखा। तो मैं हमेशा पूरा संस्करण का उपयोग करता हूं।

+0

ठीक है, यह "यूनिट बी" पैटर्न में फिट होने वाली किसी भी फाइल का उपयोग नहीं करता है और परीक्षण फ्रेमवर्क के लिए डीपीआर में नहीं है, हालांकि "इकाई बी" एक से अधिक फाइलों की निर्भरता श्रृंखला हो सकती है। मैं उसमें देख लूंगा। –

1

जांचें कि आपके पास स्रोत डीआईआर में कहीं भी पुरानी पुरानी डीसीयू फ़ाइल नहीं है।

+0

नहीं। सभी डीसीयू को हटाने से मदद नहीं मिली। –

4

मुझे इस समस्या से नफरत है। मुझे लगता है कि यह हर बार और फिर पॉप अप करता है और यद्यपि यह आपके मामले में सीधे प्लगइन के साथ जो कुछ भी कर रहा है उससे संबंधित है, मैंने संकुल के सभी dcus, bpls और dcps को ढूंढकर और हटाकर इसे हल किया है हमने लिखा है और फिर पैकेजों का पुनर्निर्माण किया है।

+1

मुझे इससे भी नफ़रत है! संकेत के लिए धन्यवाद! –

0

क्या आप एक संशोधित वीसीएल का उपयोग कर रहे हैं? आपके इंटरफ़ेस अनुभाग में संदर्भित इकाइयां भी आपके इंटरफ़ेस को निर्धारित करती हैं। मैं यह सुनिश्चित करने का सुझाव दूंगा कि आपके पास एक ही नाम (वीसीएल/आरटीएल समेत) के साथ आपकी किसी भी इकाई के दो अलग-अलग संस्करण नहीं हैं जिन्हें आपके प्रोजेक्ट से संदर्भित किया जा सकता है। हो सकता है कि यह कुछ मूर्खतापूर्ण है क्योंकि पृष्ठभूमि संकलन इकाइयों के एक अलग संस्करण का उपयोग कर डिस्क संकलन का उपयोग कर रहा है। तो इसे संपादित करना पृष्ठभूमि कंपाइलर को ट्रिगर करता है, जो तब सिंक्रनाइज़ेशन को गड़बड़ कर देता है।

+0

यह एक बहुत अच्छा विचार है, लेकिन यह कोई मुद्दा नहीं है। –

1
  1. आपकी वास्तविक .dpr फ़ाइल में .pas फ़ाइल के गलत संस्करण का संदर्भ है।

    देखें> परियोजना प्रबंधक> पेड़ का विस्तार करें और सभी इकाइयों के पथ की जांच करें।

  2. खोज पथों की सूची में एक डुप्लिकेट फ़ाइल है, और गलत संस्करण पहले

+0

दुर्भाग्य से, नहीं। मैंने पहली बार जांच की थी। यह विशिष्ट मामला संकलक में एक गड़बड़ साबित हुआ, जेनेरिक के साथ काम करते समय कई त्रुटियों में से एक। मुझे इसके आसपास काम करने का एक तरीका मिला। –

+0

ठीक है तो। क्षमा करो दोस्त:) –

1

भविष्य में संदर्भ के लिए पाया जाता है, बस "समस्या इकाइयों" के स्रोत-कोड संस्करणों के लिए संकलक ओर इशारा करते हुए यह मेरे लिए तय किया गया है (यानी खोज पथ में स्रोत कोड युक्त फ़ोल्डर जोड़ना)।

1

निश्चित रूप से कंपाइलर के साथ कुछ छोटी गाड़ी। मैंने पाया है कि उपयोग खंड में इकाइयों के क्रम में परिवर्तन करने से आपको "एक मुक्त संकलन" प्राप्त करने की अनुमति मिल जाएगी। उसके बाद, त्रुटि फिर से होती है और पुनर्निर्माण के लिए आपकी पीठ होती है। :-(

0

मेरे लिए समस्या यह थी कि मैंने न्यूनतम आवश्यक घटकों के साथ डेल्फी स्थापित किया। और जब मैंने एक परियोजना खोला जो पूर्ण डेल्फी इंस्टॉलेशन के साथ संकलित हुआ तो यह मेरे साथ हुआ। डेल्फी में "स्रोत" फ़ोल्डर में फ़ाइलों को कॉपी करना पूर्ण डेल्फी इंस्टॉलेशन के साथ किसी अन्य मशीन से इंस्टॉलेशन फ़ोल्डर ने मेरी समस्या हल की। ​​

1

मेरे मामले में, मैंने अपनी परियोजना के खोज पथ में "समस्या" इकाइयों के स्थान जोड़े। जब तक यह इसे पा सके, इसे संकलित किया गया। बेशक , यदि आपके पास फ़ाइल के कई संस्करण हैं, तो यह जटिल हो सकता है ...

1

यूनिट पीपी पैरामीटर को पीपीआरलाटव के एक अलग संस्करण के साथ संकलित किया गया था। TppRelative:

अपने प्रोग्राम फ़ोल्डर/अपने कंप्यूटर में सभी .dcu हटाएं, फिर पुन: संकलित करें या पुन: निर्माण करें। फिर आपका प्रोग्राम फिर से चल रहा है।

2

यह बहुत बार जब मैं जरूरतके रूप में पुनर्निर्माण Explict विकल्प में पुनर्निर्माण से DPK नियंत्रण बिल्ड बदलने के लिए मत भूलना मेरे लिए होता है ... | विवरण

0

मेरे मामले और समाधान:

  • हम चाहते हैं कि एक exe फ़ाइल और
  • कुछ प्लगइन परियोजनाओं है कि इस exe के लिए dll फ़ाइलों का निर्माण बनाता है एक मुख्य आवेदन किया था
    (dll परियोजना भी से कुछ की जरूरत है अनुप्रयोगों स्रोत फ़ाइलें)

कभी कभी जब dll संकलन फ़ाइलें "एक अलग संस्करण के साथ संकलित किया गया था" यह समस्या उत्पन्न हुई

समस्या यह थी:

  • exe ​​परियोजना सब यह एक अलग निर्देशिका में DCU फ़ाइलें बनाने के लिए ऐसे सेटअप था: उदा App\DCUs
  • डीएलएल प्रोजेक्ट में खोज पथ में यह डीसीयू निर्देशिका थी, लेकिन कुछ अनुप्रयोगों की स्रोत निर्देशिका भी शामिल है: उदा। App\Utils, App\Core, आदि
  • इस प्रकार, जब आप (संभवतः अन्य निर्भरता का एक अलग संस्करण के साथ अब) dll परियोजना, आवेदन स्रोत फ़ाइलों में से कुछ फिर से संकलित किया गया संकलित:
    और हम 2 अलग DCU के साथ समाप्त हो गया एक ही *.pas फ़ाइल

समाधान आसान है: dll परियोजना के खोज पथ से App\DCUs निर्देशिका को हटा दें।

3

मैं कैसे 'पथ पागलपन' डेल्फी XE7 में हल:

Rule1: Always separate the DCU from the PAS files 

    Tools -> Option -> Library path: 
       Path to global (3rd party) libraries (DCU folder) that never change. 

        c:\Delphi\Tools\FastMM\ 
        c:\MyProjects\Packages\Third party packages\$(Platform) 
        c:\MyProjects\Packages\DragDrop\$(Platform) 
        c:\MyProjects\Packages\Graphics32\$(Platform) 

    Project -> Options -> Search path: 
       Path to personal libraries, that changes often. 
       Enter the path to the DCU folder first, then path to PAS file. 
       This way, the compiler will use the DCU files first, instead of recomilin every time from PAS files. 
       It will recompile anyway if you do a Build. 

        c:\MyProjects\Packages\cCommonControls\$(Platform)_$(Config) 
        c:\MyProjects\Packages\cCommonControls\ 

    Project -> Options -> Output directory: 
       Leave it empty so the exe file is generated in project's folder 

    Project -> Options -> DCU output directory: 
       Use .\$(Platform)_$(Config) in order to enforce Rule1 
0

मैं सिर्फ डेल्फी XE में एक ही त्रुटि संदेश था। डेल्फी बंद करने के बाद मेरा हल किया गया, इसे फिर से खोलना और मेरी परियोजना को दोबारा बनाना।

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