我正在制作一个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.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要求您按照相互依赖的顺序放置目标文件和库-因此,根据经验法则,必须将库标志作为链接器的最后一个开关。一世。 e。写
g++ -I. -L. main.cpp -o main -lfoo

代替。

关于c++ - C++共享库对 `FooClass::SayHello()'的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12748837/

10-10 09:19