свободный диаметр — использование C ++ для разработки расширения

Итак, я хотел бы использовать 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 ..
}
}

также, когда я проверяю определение «fd_ext_init» в совместно используемой библиотеке через nm, это будет выглядеть так:

0000000000008140 T _Z11fd_ext_initiiPc

0

Решение

Хорошее расследование!

У вас был fd_ext_init в вашем extern "C" блокировать тоже? Все API, которые freeDiameter хочет разрешить по имени во время выполнения, должны находиться в extern "C" блок, чтобы там имена не искалечены.

Обратите внимание, что fd_ext_init определяется EXTENSION_ENTRY макрос, так что это ваш вызов того, что нужно идти в extern "C",

(Я бы не ожидал, что ta_entry нужно будет идти в extern "C" блок — я думаю, что это не нужно будет решать по имени во время выполнения.)

Надеюсь, это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]