2017-11-08 23 views
6

मैं एक तृतीय पक्ष सीएमके आधारित सी ++ प्रोजेक्ट का निर्माण कर रहा हूं।-g और बिना -DNDEBUG विकल्पों के साथ बहुत लंबा लिंकिंग समय

रिलीज मोड में प्रोजेक्ट का निर्माण केवल कुछ सेकंड लेता है। लिंकिंग चरण एक सेकंड से कम लेता है (जब make प्रिंट Linking CXX executable myproject.exe)।

डीबग मोड में बिल्डिंग एक मिनट से अधिक समय लेती है। इस समय अधिकांश निष्पादन योग्य को जोड़ने में खर्च किया जाता है। यह कोड में न्यूनतम परिवर्तन के बाद भी बाद के निर्माण के दौरान होता है।

रिलीज मोड में अंतर -g विकल्प बनाम -O3 -DNDEBUG विकल्प प्रतीत होता है। क्या यह व्यवहार अपेक्षित है? मैंने पहले (~ 18k एलओसी) के समान आकार की परियोजनाओं पर काम किया है, लेकिन मैंने कभी डीबग और रिलीज मोड के बीच संकलित समय में इतना बड़ा अंतर नहीं अनुभव किया है। विशेष रूप से डिबग मोड में बड़ी परियोजनाओं के लिए

C:\msys64\mingw64\bin\g++.exe -std=c++0x -Wall -Wextra -Wpointer-arith \ 
-Wcast-align -fstrict-aliasing -Wno-unused-local-typedefs -fvisibility- \ 
inlines-hidden -march=native -g -Wl,--whole-archive \ 
CMakeFiles\myproject.dir/objects.a -Wl,--no-whole-archive \ 
-o myproject.exe -Wl,--major-image-version,0,--minor-image-version,0 \ 
@CMakeFiles\myproject.dir\linklibs.rsp 
+0

डीबग जानकारी काफी बड़ी हो सकती है। साथ ही, मुझे लगता है कि आपके द्वारा उल्लेख किया गया '-NDEBUG' विकल्प वास्तव में' -DNDEBUG' है जो एक मैक्रो को परिभाषित करने के लिए '-D' प्रीप्रोसेसर विकल्प है। –

+0

@ सोप्रप्रोग्रामड्यूड आप सही हैं, मैंने अपनी पोस्ट अपडेट की है। मुझे अभी भी यह अजीब लगता है कि परियोजना को संकलित करने में एक मिनट लगते हैं, भले ही यह एक साफ निर्माण या पुनर्निर्माण हो। – Jawap

+3

@Jawap क्या यह संभव है कि 'एनडीईबीयूजी' को छोड़कर कुछ सामान्य हेडर में code_ के _lots सक्षम हो? – yugr

उत्तर

3

दुर्भाग्य से लिंक बार काफी धीमी हो सकती है,:

यह 50 सेकंड लेता है। चीज़ें आम तौर पर मदद कि साझा पुस्तकालयों के लिए

  • बंटवारे परियोजना (कि LLVM डेवलपर्स द्वारा जैसे किया है)
  • एसएसडी (या tmpfs)
  • डिफ़ॉल्ट BFD लिंकर के बजाय सोने लिंकर के प्रयोग पर जोड़ने हैं
+1

एलएलवीएम लिंकर भी है, जो एलएलवीएम लिंकर है, जो शायद सबसे तेज़ लिंकर है और काफी परिपक्व होना चाहिए : https://lld.llvm.org – valiano

+0

@ वेलियनो धन्यवाद, मैंने इसका जिक्र नहीं किया क्योंकि यह काफी नया है (दुनिया को जोड़ने में सक्षम होने के लिए सोने में कई सालों लगे)। – yugr

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