У меня есть код, который использует библиотеку Glib для создания нового типа. Теперь код выглядит так:
.h
file:
G_DECLARE_DERIVABLE_TYPE(NewTypeState, new_type_state, NEW, TYPE_STATE, ParentType)
.c
file:
G_DEFINE_TYPE_WITH_PRIVATE(NewTypeState, new_type_state, NEW_TYPE_STATE)
теперь согласно glib do c для создания объекта мы должны определить две функции stati c как:
static new_type_init()
static new_type_class_init()
Но в коде вместо определения stati c new_type_init () самое интересное c. объявляется как:
__declspec(dllexport) extern void new_type_init()
и определяется как:
void new_type_init()
{}
И код успешно компилируется и связывается на windows, но при попытке построить на linux я удалил __declspec(dllexport)
но я начал получать сообщение об ошибке:
stati c объявление следует за non-stati c объявление
Теперь я закомментировал объявление от .h файл и имеет только нестати c определение в файле. c, но при попытке его создания я получаю ошибку компоновщика:
неопределенная ссылка new_type_init
Я даже добавил extern к определению, но ошибка остается.
Может ли кто-нибудь объяснить вышеуказанное поведение?
РЕДАКТИРОВАТЬ :
o / p для objdump -t <file-name> | grep -i <symbol-name>
:
000000000000b440 l F .text 0000000000000023 symbol-name
0000000000000000 *UND* 0000000000000000 symbol-name