【发布时间】:2011-01-06 07:02:27
【问题描述】:
我被难住了。这是 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);
有什么线索吗?
编辑:颠簸..也许一些新鲜的眼睛可以帮助?
编辑:顺便说一句,我在编译过程中没有收到警告/错误,也没有链接。
编辑:这是预处理器输出中的几个 sn-ps。
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
【问题讨论】:
-
产生这些错误的 ld 命令行是什么?尝试在进入 actor_avs_superscope.so 的所有 .o 文件上运行 nm,看看您是否可以找出哪些源文件正在生成对这些符号的引用。
标签: c linux symbols shared-objects