2017-03-19 10 views
3

私はいくつかの共有ライブラリを構築して、異なるアルゴリズムをテストしています。両方の機能はまったく同じパラメータを持つ2つの関数をC++で同じメモリアドレスにする

extern "C" { 
    void f1(params); 
    void f2(params); 
} 

:すべての共有ライブラリの ヘッダーは次のようになります。

実装の1つでは、f1 == f2を持つ必要があることがわかりましたが、同じメモリスペースを共有したいと考えています。

これを行う方法はありますか?私は、関数ポインタは通常、トリックを行うことを知っているが、今回は共有ライブラリ標準に従う必要があります。

答えて

3

プラットフォーム固有です。

extern "C" { 
    void f1(params); 
    void f2(params) __attribute__((weak, alias("f1"))); 
} 

参考:GCCの場合、あなたはこれを行うことができますhttps://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes

+0

がいいしているようだが、私は、ヘッダーに触れることができないのです。定義に似たようなことをすることは可能ですか? – RGAM

+0

@RGAM:ヘッダーをそのまま残しておき、実装ファイルに属性を書いたf2()行を置くだけでいいと思います。 –

+1

それは働いた!どうもありがとう! – RGAM

関連する問題