私は困惑しています。これが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が欠落しているという1行があります。もう1つは、visual_mem_malloc0が欠落していると言っていますが、コードは実際にはvisual_mem_new0を呼び出しています。これは、visual_mem_new0が表示されていることを示しています。
priv = visual_mem_new0 (SuperScopePrivate, 1);
visual_mem_free (priv);
手がかりはありますか?
編集:バンピング..多分いくつかの新鮮な目が役立つことができますか?
編集:ちなみに、コンパイル中やリンク中に警告/エラーは発生しません。
編集:プリプロセッサの出力からのスニペットをいくつか示します。
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からの出力です。
$ 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