2012-04-12 13 views
6

का उपयोग कर MySQL लाइब्रेरीज़ के अनिर्धारित संदर्भ को 5.5 सर्वर के साथ प्रदान की गई MySQL लाइब्रेरीज़ के साथ अपने प्रोग्राम को लिंक करने का प्रयास करते समय मुझे undefined reference to '[email protected]#' संदेश मिल रहा है। जब MySQL स्थापित किया गया था, तो मैंने डिफ़ॉल्ट पथ का उपयोग किया, जो कि मेरे लिए विंडोज पर C:\Program Files\MySQL\MySQL Server 5.5\ है। मूल रूप से, मैंने सोचा था कि रिक्त स्थान मेरे दुःख का कारण बन रहे हैं, लेकिन मुझे लगता है कि मैंने सही तरीके से काम किया है कि बिना स्पेस के लाइब्रेरी पथ को इंगित करें (अभी भी कोई किस्मत नहीं है)। यदि कोई अन्य संभावित कारण है, तो कृपया मुझे बताएं।जी ++

मैं इस साइट मेरी समस्या का समाधान करने की कोशिश कर पर प्रश्नों की एक श्रृंखला की समीक्षा की है ...

का उपयोग MinGW/जी ++, मैं अपने खुद के अनुसंधान के साथ ही सुझाव यहाँ के आधार पर निम्न विकल्पों का उपयोग कर, लिंक करने की कोशिश की है:

  • एल "C: \ प्रोग्राम फ़ाइलें \ MySQL \ MySQL सर्वर 5.5 \ lib \ "-llibmysql.lib
  • एल" C: \ Program Files \ MySQL \ MySQL सर्वर 5.5 \ lib \ "-lmysqlclient.lib
  • एल" C: \ Progra ~ 1 \ MySQL \ MySQLS ~ 1.5 \ lib \ "-llibmysql.lib
  • -LC: \ Progra ~ 1 \ MySQL \ MySQLS ~ 1.5 \ lib \ -lmysqlclient.lib
  • एल "C: \ Progra ~ 1 \ MySQL \ MySQLS ~ 1.5 \ lib \" -lmysql

सभी मामलों में, मैंने कथन के दाएं भाग में -L/-l विकल्प डाले हैं, क्योंकि मुझे लगता है कि इससे कोई फर्क नहीं पड़ता।

मैंने पुष्टि की है कि पुस्तकालय मौजूद हैं।/Lib dir में, मेरे पास libmysql.lib है, mysqlclient.lib, और libmysql.dll। मैंने .dll से लिंक करने का प्रयास नहीं किया है, क्योंकि मैंने समीक्षा की कोई ट्यूटोरियल/फोरम सुझाया है।

मैं मेकफ़ाइल का उपयोग नहीं कर रहा हूं।

क्या किसी के पास g ++/MySQL के साथ विशिष्ट अनुभव है?

g++ my.cpp -I D:\Opt\MySQL5.5\include^
    D:\Opt\MySQL5.5\lib\libmysql.dll -o myWithDll.exe 

g++ my.cpp -I D:\Opt\MySQL5.5\include^
    -L D:\Opt\MySQL5.5\lib -lmysql -o myWithLib.exe 

तो दोनों के विरुद्ध लिंक:

+2

'dir/x' का उपयोग करें, यह प्रत्येक फ़ोल्डर के लिए छोटे नाम देता है। इस तरह आप बिना किसी रिक्त स्थान के लाइब्रेरी का मार्ग प्राप्त कर सकते हैं। – Raam

+0

@ राम यह सहायक था। वर्षों से डॉस का उपयोग करने के बावजूद, मैंने कभी उस चाल को नहीं सीखा ... दुर्भाग्य से, ऐसा नहीं लगता है कि इसने मेरी लाइब्रेरी/लिंकर समस्या का समाधान किया है। – Gaffi

उत्तर

1

निम्न कमांड मेरे लिए अच्छा काम नवंबर 2011 से एक जीसीसी 4.6.1 का उपयोग कर किया एलआईबी और डीएलएल काम करते हैं।

आपको चेतावनी मिल सकती है (गैफी की टिप्पणी देखें)। ऐसा इसलिए है क्योंकि लिंकर आपके द्वारा निर्दिष्ट किए बिना अस्पष्ट लिंकिंग करता है; आमतौर पर, यह लिंक करने में विफल रहा होता।यह अच्छा है, हालांकि, और यह आपके लिए काम कर रहा है, साथ ही साथ आपको उनसे अनुरोध किए बिना चीजों के बारे में चेतावनी दी जा रही है। जिस तरह से चेतावनी को दबाने के लिए फजी स्पष्ट जोड़ने बनाने के लिए है:

g++ -Wl,--enable-stdcall-fixup my.cpp -I D:\Opt\MySQL5.5\include^
    D:\Opt\MySQL5.5\lib\libmysql.dll -o myWithDll.exe 

g++ -Wl,--enable-stdcall-fixup my.cpp -I D:\Opt\MySQL5.5\include^
    -L D:\Opt\MySQL5.5\lib -lmysql -o myWithLib.exe 

यह लिंकर करने के लिए एक Cygwin/RedHat/MinGW विस्तार है; the docs are here:

--enable-stdcall-fixup 
--disable-stdcall-fixup 

लिंक [एर] मिलते हैं तो एक प्रतीक है कि यह समाधान नहीं कर सकता है, यह एक और परिभाषित प्रतीक है कि केवल के प्रारूप में अलग है की तलाश द्वारा "फजी लिंकिंग" करने का प्रयास करेगी प्रतीक नाम (सीडीसीएल बनाम stdcall) और मैच से लिंक करके उस प्रतीक को हल करेगा। उदाहरण के लिए, अपरिभाषित प्रतीक _foo फ़ंक्शन _foo @ 12 से जोड़ा जा सकता है, या अपरिभाषित प्रतीक _bar @ 16 फ़ंक्शन _bar से जोड़ा जा सकता है। जब लिंकर ऐसा करता है, तो यह एक चेतावनी प्रिंट करता है, क्योंकि इसे सामान्यतः लिंक करने में असफल रहा है, लेकिन कभी-कभी से उत्पन्न पुस्तकालयों को आयात करने के लिए तीसरे पक्ष के डीएलएस को इस सुविधा की उपयोग करने योग्य आवश्यकता हो सकती है। यदि आप --enable-stdcall-fixup निर्दिष्ट करते हैं, तो यह सुविधा पूरी तरह सक्षम है और चेतावनियां मुद्रित नहीं हैं। यदि आप --disable-stdcall-fixup निर्दिष्ट करते हैं, तो यह सुविधा अक्षम है और ऐसे विसंगतियों को त्रुटियां माना जाता है। [यह विकल्प लिंकर के i386 पीई लक्षित पोर्ट के लिए विशिष्ट है]

+0

मैंने अभी इसके साथ प्रयास किया: '" सी: \ प्रोग्रा ~ 1 \ MySQL \ MySQLS ~ 1.5 \ lib \ libmysql.dll "' और इसके बजाय निम्नलिखित मिला (चेतावनियां, लेकिन कम से कम यह जुड़ा हुआ है!) .. । चेतावनी: _mysql_init से लिंक करके _mysql_init @ 4 को हल करना इन चेतावनियों को अक्षम करने के लिए --enable-stdcall-fixup का उपयोग करें इन फ़िक्सअप को अक्षम करने के लिए अक्षम-stdcall-fixup का उपयोग करें इस पर कोई विचार? क्या मुझे एक और लिंकर विकल्प का उपयोग करना चाहिए, या क्या मुझे जाना अच्छा लगता है? – Gaffi

+0

@Gaffi - मेरे उत्तर में अपडेट देखें। – Lumi

0

आप -lmysql कोशिश के रूप में लिंकर स्वचालित रूप से lib पहले जोड़ता और संलग्न कर देता है .lib

+0

मैंने बस कोशिश की, कोई भाग्य नहीं। (प्रश्न अपडेट कर रहा है) – Gaffi