[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 01/13] build-sys: fix qemu-ga -pthread linkin
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH v2 01/13] build-sys: fix qemu-ga -pthread linking |
Date: |
Fri, 15 Dec 2017 18:31:26 +0000 |
On 15 December 2017 at 18:21, Philippe Mathieu-Daudé <address@hidden> wrote:
> Hi Marc-André,
>
> On 12/15/2017 12:06 PM, Marc-André Lureau wrote:
>> When linking qemu-ga under some configuration (when gthread-2.0.pc
>> doesn't have -pthread, as happening atm with meson build), you may
>> have this linking issue:
>>
>> /usr/bin/ld: libqemuutil.a(qemu-thread-posix.o): undefined reference to
>> symbol 'pthread_setname_np@@GLIBC_2.12'
>> /usr/lib64/libpthread.so.0: error adding symbols: DSO missing from command
>> line
>>
>> Make sure qemu-ga links with the pthread library, by adding correct
>> flags to libs_qga.
This commit message misled me temporarily, because it suggests
that the problem is with the gthread-2.0.pc pkg-config file.
But this is really a QEMU bug, because it's QEMU code that's
using pthread functions, and so we must explicitly link against
pthreads. The bug was just masked by the fact that often some
pkg-config or another for one of our dependencies will add
-pthread to the link line anyway.
>> Signed-off-by: Marc-André Lureau <address@hidden>
>> ---
>> configure | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/configure b/configure
>> index 0c6e7572db..2b8c71f522 100755
>> --- a/configure
>> +++ b/configure
>> @@ -3436,6 +3436,7 @@ else
>> done
>> if test "$found" = "no"; then
>> LIBS="$pthread_lib $LIBS"
>> + libs_qga="$pthread_lib $libs_qga"
>> fi
>> PTHREAD_LIB="$pthread_lib"
>> break
Reviewed-by: Peter Maydell <address@hidden>
> Hmm why not add it later, around line 4270:
>
> if compile_prog "" "" ; then
> :
> # we need pthread for static linking. use previous pthread test result
> elif compile_prog "" "$pthread_lib -lrt" ; then
> LIBS="$LIBS -lrt"
> libs_qga="$libs_qga -lrt" # <-- here
> fi
Because that's a different test, which is checking whether we
need to link against librt. We might need to link against pthread
even if we don't need to link against librt.
thanks
-- PMM