C ++共享库未定义引用'FooClass :: SayHello()'

我正在做一个C ++共享库,当我编译一个使用该库编译器给我的主要的exe文件:

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: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 

该机器是Ubuntu Linux 12

谢谢!

 g++ -I. -L. -lfoo main.cpp -o main 

是问题。 最近的GCC版本要求你把对象文件和库按照它们相互依赖的顺序排列 – 作为一个相应的经验法则,你必须把库标志作为链接器的最后一个开关; 即写

 g++ -I. -L. main.cpp -o main -lfoo 

代替。