使用C ++开发freediameter扩展

时间:2017-01-15 20:41:50

标签: c++ free-diameter

所以,我想用C ++开发freediameter扩展, 共享库已成功编译和链接,但是当它被freediameter守护程序使用时,我收到此错误:

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块但没有运气:

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

当我通过nm检查共享库中的“fd_ext_init”定义时,它就像是:

0000000000008140 T _Z11fd_ext_initiiPc

1 个答案:

答案 0 :(得分:0)

好好调查!

您的fd_ext_init区块中是否还有extern "C"? freeDiameter希望在运行时按名称解析的所有API都必须位于extern "C"块中,以便不会破坏名称。

请注意,fd_ext_init由EXTENSION_ENTRY宏定义,因此您需要调用extern "C"

(我实际上不希望ta_entry需要进入extern "C"块 - 我认为这不需要在运行时通过名称解析。)

我希望有所帮助!