2017-01-15 7 views
0

フリーダイヤル番号拡張を開発するのにC++を使用したい 共有ライブラリがコンパイルされ、正常にリンクされていますが、freediameterデーモンで使用されるときにこのエラーが発生します。C++を使用してフリーダイヤルエクステンションを開発する

01/16/17,00:04:59.215241 ERROR Unable to resolve symbol 'fd_ext_init' for extension /home/usr/Downloads/freeDiameter-master/extensions/ocs_app/ocs_app.fdx: Undefined symbol "fd_ext_init" 
01/16/17,00:04:59.215361 ERROR ERROR: in '((fd_ext_load()))' :  Invalid argument 
01/16/17,00:04:59.215377 ERROR ERROR: in '(fd_core_parseconf(conffile))' : Invalid argument 
01/16/17,00:04:59.215387 FATAL! Initiating freeDiameter shutdown sequence (1) 

私はそれが名前のマングリングと何かを持っていると思うが、私は解決策を見つけることができない。すでにのexternブロックへのエントリポイントを入れてみましたが、運:

0000000000008140 T _Z11fd_ext_initiiPc 

答えて

0

グッド:私はNMを介して共有libaryで「fd_ext_init」の定義を確認したときに

extern "C" { 
    static int ta_entry() { 
    // C/C++ codes here .. 
    } 
} 

も、それは次のようになることはありませ思い調査!

ブロックextern "C"ブロックにfd_ext_initがありましたか? freeDiameterが実行時に名前で解決しようとするすべてのAPIは、extern "C"ブロック内にある必要があります。そのため、名前がマングルされません。

fd_ext_initはEXTENSION_ENTRYマクロで定義されているので、extern "C"にする必要があります。

(私は実際にextern "C"ブロックに行く必要があるためにta_entryを期待していない - 私はこれは、実行時に名前で解決する必要はないと思います。)

が、私はそれが役に立てば幸い!

+0

マット、返信いただきありがとうございます。論理的に私は正しい答えを見つけた:)私はコードを変更し、家に帰るとすぐにあなたを更新します – atari83

+0

マットありがとう、それはちょうどうまくいった^ _ ^ – atari83

関連する問題