Я в тупике. Вот вывод ld.недостающих символов, которые должны быть там
/usr/lib/libvisual-0.6/actor/actor_avs_superscope.so: undefined reference to `visual_mem_free'
/usr/lib/libvisual-0.6/actor/actor_avs_superscope.so: undefined reference to `visual_mem_malloc0'
Вот макросы:
#define visual_mem_new0(struct_type, n_structs) \
((struct_type *) visual_mem_malloc0 (((visual_size_t) sizeof (struct_type)) * ((visual_size_t) (n_structs))))
#define visual_mem_malloc(size) \
visual_mem_malloc_impl (size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
#define visual_mem_malloc0(size) \
visual_mem_malloc0_impl (size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
#define visual_mem_realloc(ptr, size) \
visual_mem_realloc_impl (ptr, size, __FILE__, __LINE__, __PRETTY_FUNCTION__)
#define visual_mem_free(ptr) \
visual_mem_free_impl (ptr, __FILE__, __LINE__, __PRETTY_FUNCTION__)
Теперь не складываются. Одна строка говорит, что отсутствует visual_mem_free, что является макросом. Другой говорит, что visual_mem_malloc0 отсутствует, но на самом деле вызов visual_mem_new0 кода, который предполагает, что он видит visual_mem_new0.
priv = visual_mem_new0 (SuperScopePrivate, 1);
visual_mem_free (priv);
Любые подсказки?
Редактировать: Bumping .. Может быть, некоторые свежие глаза могут помочь?
Редактировать: Кстати, во время компиляции и связывания я не получаю никаких предупреждений/ошибок.
Редактировать: Вот пара фрагментов из вывода препроцессора.
int lv_superscope_cleanup (VisPluginData *plugin)
{
SuperScopePrivate *priv = visual_object_get_private ((((VisObject*) ((plugin)))));
visual_mem_free_impl (priv, "actor_avs_superscope.c", 195, __PRETTY_FUNCTION__);
return 0;
}
И:
priv = ((SuperScopePrivate *) visual_mem_malloc0_impl (((visual_size_t) sizeof (SuperScopePrivate)) * ((visual_size_t) (1)), "actor_avs_superscope.c", 152, __PRETTY_FUNCTION__));
Похоже, макросы расширяются. Я смущен. Ожидается расширение __PRETTY_FUNCTION__
?
Интересно, что здесь выводятся строки.
$ strings .libs/actor_avs_superscope.so |grep malloc
visual_mem_malloc0_impl
visual_mem_malloc0
malloc
Крис: Я просто бегу ld /usr/lib/libvisual-0.6/actor/actor_avs_superscope.so
.
А вот выход из нм:
$ nm actor_avs_superscope.o |grep malloc
U visual_mem_malloc0_impl
$ nm actor_avs_superscope.o |grep free
U visual_mem_free_impl
U visual_palette_free_colors
Что такое команда ld, которая дает эти ошибки? Попробуйте запустить nm на всех файлах .o, которые входят в actor_avs_superscope.so, чтобы узнать, можете ли вы выяснить, какие исходные файлы генерируют ссылки на эти символы. –