【发布时间】:2014-09-06 06:19:40
【问题描述】:
当尝试编译更新版本的 ImageMagick(v6.8.7-2 或更高版本,v6.8.7-1 很好)时,我得到了一堆:
CCLD magick/libMagickCore-6.Q16.la
magick/.libs/magick_libMagickCore_6_Q16_la-animate.o: In function `__pthread_cleanup_routine':
/usr/include/pthread.h:581: multiple definition of `__pthread_cleanup_routine'
magick/.libs/magick_libMagickCore_6_Q16_la-accelerate.o:/usr/include/pthread.h:581: first defined here
magick/.libs/magick_libMagickCore_6_Q16_la-annotate.o: In function `__pthread_cleanup_routine':
/usr/include/pthread.h:581: multiple definition of `__pthread_cleanup_routine'
magick/.libs/magick_libMagickCore_6_Q16_la-accelerate.o:/usr/include/pthread.h:581: first defined here
magick/.libs/magick_libMagickCore_6_Q16_la-artifact.o: In function `__pthread_cleanup_routine':
/usr/include/pthread.h:581: multiple definition of `__pthread_cleanup_routine'
magick/.libs/magick_libMagickCore_6_Q16_la-accelerate.o:/usr/include/pthread.h:581: first defined here
magick/.libs/magick_libMagickCore_6_Q16_la-attribute.o: In function `__pthread_cleanup_routine':
/usr/include/pthread.h:581: multiple definition of `__pthread_cleanup_routine'
magick/.libs/magick_libMagickCore_6_Q16_la-accelerate.o:/usr/include/pthread.h:581: first defined here
... goes on for quite a bit longer, all the same.
/usr/include/pthread.h(来自 glibc-headers 2.5-118.el5_10.2)的相关区域是:
/* Function called to call the cleanup handler. As an extern inline
function the compiler is free to decide inlining the change when
needed or fall back on the copy which must exist somewhere else. */
extern __inline void
__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
{
if (__frame->__do_it) // <======= this is :581
__frame->__cancel_routine (__frame->__cancel_arg);
}
我一直在 ImageMagick 的论坛上发帖,但没有任何回应。
即使您不能确切地说出发生了什么,我如何开始确定问题出在 ImageMagick 还是 pthread.h 上?我从那里去哪里?
grep pthread_cleanup_routine -r * 只显示与二进制对象文件的匹配——ImageMagick 的源代码中没有一个包含 pthread_cleanup_routine。当然,其中一些来源包括“pthread.h”。
这让我相信这是一个 glibc 问题,而不是 ImageMagick 问题……但同样,ImageMagick 的早期版本编译得很好。 (我已经区分了它破坏的版本之间的 svn 源代码。很多配置/makefile 更改,但没有什么让我知道它为什么会导致这种情况。)
我在 CentOS 5 上,内核 2.6.18-308.24.1.el5,gcc v4.9.0,ld v2.24,glibc-headers 2.5-118.el5_10.2
【问题讨论】:
标签: c++ c pthreads imagemagick glibc