使用 C++ 开发自由直径扩展

using C++ for developing freediameter extension

所以,我想使用 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 "C" {
  static int ta_entry() {
     // C/C++ codes here ..
  }
} 

另外,当我通过 nm 检查共享库中的 "fd_ext_init" 定义时,它会像:

0000000000008140 T _Z11fd_ext_initiiPc

很好的调查!

你的 extern "C" 块中是否也有 fd_ext_init? freeDiameter 想要在运行时按名称解析的所有 API 都需要位于 extern "C" 块中,这样名称就不会被破坏。

请注意 fd_ext_init 是由 EXTENSION_ENTRY 宏定义的,因此您需要在 extern "C".

中调用它

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

希望对您有所帮助!