3

私はCode::Blocksを使用してUbuntuで共有ライブラリをコンパイルしています。次のコマンドを使用して単純なmain.cファイルを作成すると、次のようになります。

void* CreateInterface()
{
    int* x = (int*)malloc( sizeof( int ) );
    *x = 1337;
    return x;
}

これは正常に機能し、別のアプリケーションでdlsymを使用した関数CreateInterfaceを見つけることができます。ただし、C++で記述されたクラスのインスタンスを作成する関数が必要です。私は次のことを試しました:

#include "IRender.h"

extern "C"
{
    void* CreateInterface()
    {
        return new Flow::Render::IRender();
    }
}

これは正常にコンパイルされましたが、他のアプリケーションがCreateInterfaceを見つけることができません。これにどう対処すればいいですか?

4

1 に答える 1

2

宣言を含む.cppファイルを作成することで問題を解決しました。

extern "C" void* CreateInterface()
{
    return new Flow::Render::IRender();
}

そして、次のようなヘッダーを持つ.cファイル:

extern void* CreateInterface();
于 2010-04-08T13:23:53.293 に答える