में मौजूद है मैं इसी तरह के सवाल (जैसे this, that या this) के एक नंबर मिल गया है, लेकिन उनमें से कोई मुझे मेरी समस्या का समाधान में मदद की।जी ++ अपरिभाषित संदर्भ हालांकि प्रतीक * .so फ़ाइल
$nm libgnss_system_parameters_dyn.so | c++filt |grep Gps_Eph
प्रतीक Gps_Ephemeris::Gps_Ephemeris()
है, जो एक निर्माता माना जाता है शामिल हैं: मुझे लगता है कि, के रूप में द्वारा संकेत एक * .so फ़ाइल (gnss-sdr की कोर से) है।
#include <iostream>
#include <core/system_parameters/gps_ephemeris.h>
int main(int argc,const char* argv[])
{
Gps_Ephemeris ge;
return 0;
}
जो मैं के साथ संकलन:
g++ main.cpp -std=c++0x -I some_include_path -L some_lib_path -l gnss_system_parameters_dyn`
लिंकर तो शिकायत:
मैं कुछ न्यूनतम कोड लिखा है
/tmp/ccHCvldG.o: In function `main':
main.cpp:(.text+0x33): undefined reference to `Gps_Ephemeris::Gps_Ephemeris()'
collect2: error: ld returned 1 exit status
मैं भी cmake की कोशिश की, लेकिन यह उत्पन्न लाइन उस के समान थी (यह अभीजोड़ा गया था लिंक करने से पहले), और यह अभी भी सटीक वही लिंकर त्रुटि उत्पन्न करता है।
ध्यान दें कि लाइब्रेरी और मेरे न्यूनतम कोड दोनों एक ही कंपाइलर (जी ++ - 5) के साथ संकलित किए जा रहे हैं, ठीक उसी झंडे और एक ही सी ++ 0x मानक के साथ।
nm --demangle --defined-only --extern-only libgnss_system_parameters.so |grep Gps_Eph
नहीं है उत्पादन कुछ भी:
मैक्सिम Egorushkin, लाइन द्वारा जवाब को संबोधित करते। हालांकि, प्रतीक स्थिर पुस्तकालय (यानी * ए पुस्तकालय) में परिभाषित किया गया है:
00000000000006b0 T Gps_Ephemeris::Gps_Ephemeris()
00000000000006b0 T Gps_Ephemeris::Gps_Ephemeris()
यह जानते हुए कि दोनों निम्नलिखित तरीके से, cmake द्वारा उत्पन्न कर रहे:
add_library(lib_name SHARED ${sources_etc}) #for the *.so
add_library(lib_name_2 ${sources_etc}) #for the *.a
उन पुस्तकालयों में निहित/परिभाषित प्रतीकों में कोई अंतर नहीं होना चाहिए, है ना? मैंने सेमीके के दस्तावेज़ों में add_library
पर कुछ भी ध्यान नहीं दिया। क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?
आपने कहा कि आउटपुट _ प्रतीक 'Gps_Ephemeris :: Gps_Ephermeris() '_ है, लेकिन वास्तविक आउटपुट नहीं दिखाता है। यह प्रासंगिक है, और उपयोगी होगा। साथ ही, आपने स्पष्ट रूप से प्रश्न में उस प्रतीक को कॉपी और चिपकाया नहीं है, क्योंकि आपने इसे गलत तरीके से याद किया है। मैं इस तरह के लिखित सारांशों से अविश्वासू हूं, क्योंकि यदि आप अपने सारांश से बाहर निकलने के लिए एक विश्वसनीय न्यायाधीश थे, तो शायद आप सवाल नहीं पूछेंगे। – Useless
उस पर ध्यान देने के लिए धन्यवाद, मैंने इसे ठीक किया। मैं ज्यादातर उच्च स्तरीय कंप्यूटर दृष्टि करता हूं, इसलिए हां, मुझे यह तय करने के लिए अयोग्य महसूस होता है कि क्या बाहर रखा जाना है। जितनी जल्दी हो सके मैं आउटपुट पोस्ट करूंगा। – Ash
स्रोत कोड को देखे बिना यह कहना मुश्किल है कि एक ही स्रोत से बनाया गया .so और .a विभिन्न प्रतीकों का निर्यात क्यों करता है। सशर्त संकलन शामिल हो सकता है। –