diff mbox

qemu-ga static compilation

Message ID 20170320135708.GV17887@stefanha-x1.localdomain (mailing list archive)
State New, archived
Headers show

Commit Message

Stefan Hajnoczi March 20, 2017, 1:57 p.m. UTC
On Tue, Mar 14, 2017 at 06:51:37PM +0200, Sameeh Jubran wrote:
> I am trying to compile qemu-ga for Windows statically using the following
> commands:
> 
> ./configure --disable-docs --target-list=x86_64-softmmu
> --cross-prefix=x86_64-w64-mingw32- --static --enable-guest-agent-msi
> --with-vss-sdk=/path/to/VSSSDK72
> 
> make -j8 qemu-ga
> 
> 
> And I keep getting this error:
> 
> /home/sameeh/Builds/q/stubs/error-printf.c:7: undefined reference to
> `__imp_g_test_config_vars'
> collect2: error: ld returned 1 exit status
> Makefile:444: recipe for target 'qemu-ga.exe' failed
> make: *** [qemu-ga.exe] Error 1
> 
> 
> Notes to consider:
> * without --static I can compile it successfully
> * Build machine is running Fedora 25
> * I have upgraded all of the tools to their latest version
> * If I comment out the function which is causing the issue
> (g_test_initialized()), qemu ga compiles statically and runs successfully
> without the need of any dlls.
> 
> Can anyone reproduce this? Do you have any idea why is this happening?

I guess GLIB_STATIC_COMPILATION is not defined in your build (see the
definition of GLIB_VAR in the glib headers).

The pkg-config file for glib doesn't define GLIB_STATIC_COMPILATION for
pkg-config --static.  I guess we must add it manually.

Does this work?

Comments

Peter Maydell March 20, 2017, 2:04 p.m. UTC | #1
On 20 March 2017 at 13:57, Stefan Hajnoczi <stefanha@gmail.com> wrote:
> I guess GLIB_STATIC_COMPILATION is not defined in your build (see the
> definition of GLIB_VAR in the glib headers).
>
> The pkg-config file for glib doesn't define GLIB_STATIC_COMPILATION for
> pkg-config --static.  I guess we must add it manually.

This seems like a pkg-config config file bug to me.

> Does this work?
>
> diff --git a/configure b/configure
> index 99d8bec..10f23b7 100755
> --- a/configure
> +++ b/configure
> @@ -3047,6 +3047,10 @@ if test "$modules" = yes; then
>      glib_modules="$glib_modules gmodule-2.0"
>  fi
>
> +if test "$static" = yes; then
> +    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
> +fi
> +

I know this is just a "let's see if this works" patch, but
some notes for if this becomes a real patch later:

If we work around this packaging bug in our configure script
we should have a comment stating that it's a workaround for
a packaging bug, and we should probably restrict it to only
being done for Windows builds.

thanks
-- PMM
Sameeh Jubran March 20, 2017, 3:44 p.m. UTC | #2
On Mon, Mar 20, 2017 at 3:57 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:

> On Tue, Mar 14, 2017 at 06:51:37PM +0200, Sameeh Jubran wrote:
> > I am trying to compile qemu-ga for Windows statically using the following
> > commands:
> >
> > ./configure --disable-docs --target-list=x86_64-softmmu
> > --cross-prefix=x86_64-w64-mingw32- --static --enable-guest-agent-msi
> > --with-vss-sdk=/path/to/VSSSDK72
> >
> > make -j8 qemu-ga
> >
> >
> > And I keep getting this error:
> >
> > /home/sameeh/Builds/q/stubs/error-printf.c:7: undefined reference to
> > `__imp_g_test_config_vars'
> > collect2: error: ld returned 1 exit status
> > Makefile:444: recipe for target 'qemu-ga.exe' failed
> > make: *** [qemu-ga.exe] Error 1
> >
> >
> > Notes to consider:
> > * without --static I can compile it successfully
> > * Build machine is running Fedora 25
> > * I have upgraded all of the tools to their latest version
> > * If I comment out the function which is causing the issue
> > (g_test_initialized()), qemu ga compiles statically and runs successfully
> > without the need of any dlls.
> >
> > Can anyone reproduce this? Do you have any idea why is this happening?
>
> I guess GLIB_STATIC_COMPILATION is not defined in your build (see the
> definition of GLIB_VAR in the glib headers).
>
> The pkg-config file for glib doesn't define GLIB_STATIC_COMPILATION for
> pkg-config --static.  I guess we must add it manually.
>
> Does this work?
>
> diff --git a/configure b/configure
> index 99d8bec..10f23b7 100755
> --- a/configure
> +++ b/configure
> @@ -3047,6 +3047,10 @@ if test "$modules" = yes; then
>      glib_modules="$glib_modules gmodule-2.0"
>  fi
>
> +if test "$static" = yes; then
> +    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
> +fi
> +
>
Yes! this works thank you =)

>  for i in $glib_modules; do
>      if $pkg_config --atleast-version=$glib_req_ver $i; then
>          glib_cflags=$($pkg_config --cflags $i)
>
Sameeh Jubran March 21, 2017, 9:23 a.m. UTC | #3
Just to make it clear,

Stefan you are going to send a patch right?

On Mon, Mar 20, 2017 at 5:44 PM, Sameeh Jubran <sameeh@daynix.com> wrote:

>
>
> On Mon, Mar 20, 2017 at 3:57 PM, Stefan Hajnoczi <stefanha@gmail.com>
> wrote:
>
>> On Tue, Mar 14, 2017 at 06:51:37PM +0200, Sameeh Jubran wrote:
>> > I am trying to compile qemu-ga for Windows statically using the
>> following
>> > commands:
>> >
>> > ./configure --disable-docs --target-list=x86_64-softmmu
>> > --cross-prefix=x86_64-w64-mingw32- --static --enable-guest-agent-msi
>> > --with-vss-sdk=/path/to/VSSSDK72
>> >
>> > make -j8 qemu-ga
>> >
>> >
>> > And I keep getting this error:
>> >
>> > /home/sameeh/Builds/q/stubs/error-printf.c:7: undefined reference to
>> > `__imp_g_test_config_vars'
>> > collect2: error: ld returned 1 exit status
>> > Makefile:444: recipe for target 'qemu-ga.exe' failed
>> > make: *** [qemu-ga.exe] Error 1
>> >
>> >
>> > Notes to consider:
>> > * without --static I can compile it successfully
>> > * Build machine is running Fedora 25
>> > * I have upgraded all of the tools to their latest version
>> > * If I comment out the function which is causing the issue
>> > (g_test_initialized()), qemu ga compiles statically and runs
>> successfully
>> > without the need of any dlls.
>> >
>> > Can anyone reproduce this? Do you have any idea why is this happening?
>>
>> I guess GLIB_STATIC_COMPILATION is not defined in your build (see the
>> definition of GLIB_VAR in the glib headers).
>>
>> The pkg-config file for glib doesn't define GLIB_STATIC_COMPILATION for
>> pkg-config --static.  I guess we must add it manually.
>>
>> Does this work?
>>
>> diff --git a/configure b/configure
>> index 99d8bec..10f23b7 100755
>> --- a/configure
>> +++ b/configure
>> @@ -3047,6 +3047,10 @@ if test "$modules" = yes; then
>>      glib_modules="$glib_modules gmodule-2.0"
>>  fi
>>
>> +if test "$static" = yes; then
>> +    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
>> +fi
>> +
>>
> Yes! this works thank you =)
>
>>  for i in $glib_modules; do
>>      if $pkg_config --atleast-version=$glib_req_ver $i; then
>>          glib_cflags=$($pkg_config --cflags $i)
>>
>
>
>
> --
> Respectfully,
> *Sameeh Jubran*
> *Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
> *Software Engineer @ Daynix <http://www.daynix.com>.*
>
Stefan Hajnoczi March 22, 2017, 5:08 p.m. UTC | #4
On Tue, Mar 21, 2017 at 11:23:39AM +0200, Sameeh Jubran wrote:
> Just to make it clear,
> 
> Stefan you are going to send a patch right?

I see you've sent a patch.  Please go ahead with it.

Stefan
diff mbox

Patch

diff --git a/configure b/configure
index 99d8bec..10f23b7 100755
--- a/configure
+++ b/configure
@@ -3047,6 +3047,10 @@  if test "$modules" = yes; then
     glib_modules="$glib_modules gmodule-2.0"
 fi
 
+if test "$static" = yes; then
+    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
+fi
+
 for i in $glib_modules; do
     if $pkg_config --atleast-version=$glib_req_ver $i; then
         glib_cflags=$($pkg_config --cflags $i)