मैं एक सी ++ साझा लाइब्रेरी बना रहा हूं और जब मैं एक मुख्य exe पुस्तकालय का उपयोग करता है संकलक मुझे देता संकलन:सी ++ `FooClass :: SayHello को साझा लाइब्रेरी अपरिभाषित संदर्भ() '
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
लाइब्रेरी कोड :
fooclass.h
#ifndef __FOOCLASS_H__
#define __FOOCLASS_H__
class FooClass
{
public:
char* SayHello();
};
#endif //__FOOCLASS_H__
fooclass.cpp
#include "fooclass.h"
char* FooClass::SayHello()
{
return "Hello Im a Linux Shared Library";
}
साथ संकलन:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
मुख्य: main.cpp
#include "fooclass.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
FooClass * fooClass = new FooClass();
cout<< fooClass->SayHello() << endl;
return 0;
}
साथ संकलन:
g++ -I. -L. -lfoo main.cpp -o main
मशीन एक उबंटू लिनक्स 12
धन्यवाद है!
कंपाइलर कमांड के अंत में पुस्तकालय। Http://stackoverflow.com/questions/9966959/noobish-linker-errors-when-compiling-against-glib/9966989#9966989 – hmjd
लिखना न लिखें गार्ड (या कोई अन्य नाम) जिसमें दो अंडरस्कोर होते हैं या साथ शुरू होते हैं एक अंडरस्कोर एक पूंजी पत्र के बाद। वे नाम कार्यान्वयन के लिए आरक्षित हैं। (संभवतः इस प्रश्न के सही उत्तर के साथ कुछ भी करने की ज़रूरत नहीं है) –
@ क्लोज मतदाता: मुझे लगता है कि यह प्रश्न दूसरे की तुलना में बेहतर है (सबसे पहले, शीर्षक वर्णनात्मक नहीं है, और दूसरा, दूसरे में एक बाहरी जंक का एक टन है) – Wug