24

私は 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 です

ありがとう!

4

1 に答える 1

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

が問題です。最近のバージョンの GCC では、オブジェクト ファイルとライブラリを相互に依存する順序で配置する必要があります。経験則として、リンカーの最後のスイッチとしてライブラリ フラグを配置する必要があります。すなわち、書く

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

代わりは。

于 2012-10-05T14:57:21.953 に答える