2012-03-14 12 views
6

के साथ स्थिर ओपनसीवी पुस्तकालयों को जोड़ने में त्रुटि मैंने स्थिर ओपनसीवी 2.3 पुस्तकालयों का निर्माण किया। मेरी परियोजना वर्तमान में गतिशील वाले लोगों का उपयोग करती है, लेकिन अब मैं स्थिर libs का उपयोग करना चाहता हूं। मैं अपने .pro फाइल करने के लिए libs कहा:LNK2005 विजुअल स्टूडियो और क्यूटी निर्माता

LIBS += "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_calib3d231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_contrib231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_core231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_features2d231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_flann231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_gpu231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_haartraining_engine.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_highgui231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_imgproc231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_legacy231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ml231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_objdetect231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ts231.lib" \ 
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_video231.lib" 

और dirs में शामिल हैं:

LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" ([email protected]@YAXXZ) already defined in MSVCRT.lib(MSVCR100.dll) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.lib(cinitexe.obj) 
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRT.lib(MSVCR100.dll) 
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 

कोई मदद या सुझाव की सराहना की:

INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include" 
INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include\opencv" 

मैं इन त्रुटियों को मिलता है जब मैं बनाने की कोशिश ।

उत्तर

9

CMake पर, जब BUILD_SHARED_LIBS मैं भी अनियंत्रित BUILD_WITH_STATIC_CRT अनचेक के अलावा, openCV स्थिर पुस्तकालयों का निर्माण, और जो उस विशेष समस्या का ध्यान रखा

+2

+1। ऐसा लगता है कि प्री-बिल्ट विंडोज स्थिर libs स्थिर सीआरटी (/ एमटी) के साथ बनाया गया है। यदि आपकी प्रोजेक्ट गतिशील सीआरटी (/ एमडी) का उपयोग करती है तो आपको ओपनसीवी को अपने आप पुनर्निर्माण करना होगा। –

+0

+1। दुखद लेकिन सत्य। –

+0

ओपनसीवी v3.1 के साथ काम करने की पुष्टि भी – M2X

1

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

+0

क्या ऐसा करने का कोई और समाधान है? या तो विशिष्ट झंडे के साथ ओपनसीवी का पुनर्निर्माण या क्यूटी निर्माता पर बिल्ड विकल्प बदलना? ओपनसीवी libs के निर्माण के लिए मैंने इसे cmake द्वारा जेनरेट की गई समाधान फ़ाइल का निर्माण किया है, जिसमें साझा लाइब्रेरी चेकबॉक्स अनचेक किया गया है, जो मेरी समझ के लिए आपको स्थिर libs के लिए समाधान प्राप्त करने की आवश्यकता है। और क्यूटी निर्माता पर जो मैंने पढ़ा है, वह उन libs को आयात करने का एक साधारण मामला होना चाहिए? – jzepeda

+0

केवल परीक्षण के उद्देश्य के लिए: क्या आप डीबग मोड की बजाय रिलीज मोड में अपनी परियोजना को संकलित करने का प्रयास करेंगे? – salomon

+0

मैं सभी के साथ रिलीज कर रहा हूं। डीबग मुझे "opencv_core231.lib (drawing.obj) जैसी त्रुटियां देता है: - 1: त्रुटि: LNK2038: '_ITERATOR_DEBUG_LEVEL' के लिए मेल नहीं मिला: मान '0' मुख्य.ओबीजे में मान '2' से मेल नहीं खाता है। नीचे दिए गए समाधान ने इसे मेरे लिए तय किया है, हालांकि मुझे संदेह है कि मुझे विकल्प को पुन: सक्षम करना होगा (क्योंकि ऐसा लगता है कि क्यूटी स्थिर रूप से लिंक नहीं है, और मैं यह भी चाहूंगा कि मेरी परियोजना को पुनर्वितरण योग्य बनाया जाए) – jzepeda

5

सुनिश्चित करें कि परियोजना गुण> विन्यास गुण> C/C++> कोड जनरेशन: रनटाइम लाइब्रेरी मल्टी-थ्रेडेड (/ एमटी)

+0

या डीबग बिल्ड के लिए एमटीडी – sastanin

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