2013/5/31 Erik van Pienbroek <[email protected]>
> Hi,
>
> While trying to compile all Fedora packages against winpthreads [1] we
> found out that gstreamer fails to build with this linker error:
>
> CCLD libgstreamer-0.10.la
> .libs/libgstreamer_0.10_la-gstsystemclock.o: In function
> `gst_system_clock_get_resolution':
> /builddir/build/BUILD/gstreamer-0.10.36/build_win32/gst/../../gst/gstsystemclock.c:550:
> undefined reference to `clock_getres'
> .libs/libgstreamer_0.10_la-gstsystemclock.o: In function
> `gst_system_clock_get_internal_time':
> /builddir/build/BUILD/gstreamer-0.10.36/build_win32/gst/../../gst/gstsystemclock.c:524:
> undefined reference to `clock_gettime'
> .libs/libgstreamer_0.10_la-gstutils.o: In function
> `gst_util_get_timestamp':
> /builddir/build/BUILD/gstreamer-0.10.36/build_win32/gst/../../gst/gstutils.c:3940:
> undefined reference to `clock_gettime'
>
> I took a closer look at this and here's what happens:
> The gstreamer configure script tests whether the #define's _POSIX_TIMERS
> and CLOCK_REALTIME are set.
> This test succeeds as these are both set in winpthreads' pthread_time.h.
> Therefore the build system makes the assumption that symbols like
> clock_getres and clock_gettime are available.
>
> The documentation about these clock_* symbols tells us that these symbols
> are POSIX
> specific and are part of libc (for glibc <= 2.17 the linker flag -lrt must
> be used)
>
> In mingw-w64 these symbols are exported in winpthreads, thus -lpthread
> need to be part of the linker flags.
>
> Gstreamer isn't aware that -lpthread needs to be part of the linker flags
> for these clock_* symbols and therefore the build fails.
>
> I could find any documentation that these clock_* symbols may be part of
> the pthread library so I think
> that in mingw-w64 these symbols shouldn't be exported in winpthreads. A
> more suitable place for these
> symbols would be the mingw-w64-crt so that each compiled binary can have
> access to these symbols.
>
> What are your opinions about this?
>
Seeing as librt would need to be linked on Linux, perhaps libpthread could
just be linked on Win32 instead then?
glibc provides linkable symbols for libpthread, but lacks the real
implementation, resulting in funny runtime failures like this one (see the
"update" and comments):
http://stackoverflow.com/questions/6485705/why-does-this-simple-stdthread-example-not-work/6485728#6485728
I don't care how this would be solved. Just providing some context.
Ruben
> Regards,
>
> Erik van Pienbroek
>
>
> [1]: http://sourceforge.net/mailarchive/message.php?msg_id=30821407
>
>
>
>
> ------------------------------------------------------------------------------
> Get 100% visibility into Java/.NET code with AppDynamics Lite
> It's a free troubleshooting tool designed for production
> Get down to code-level detail for bottlenecks, with <2% overhead.
> Download for free and get started troubleshooting in minutes.
> http://p.sf.net/sfu/appdyn_d2d_ap2
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public