Loading...

gcc-help@gcc.gnu.org

[Prev] Thread [Next]  |  [Prev] Date [Next]

Re: The order of arguments differs spam . spam . spam . spam Thu Feb 16 00:00:46 2012

On the first computer, I recompile libxml2 "dynamically" :
./configure --prefix=/.../software/libxml2-2.7.8 --disable-static
make
make install

now :
$ xml2-config --libs
-L/.../software/libxml2-2.7.8/lib -lxml2 -lm
$ xml2-config --cflags
-I/.../software/libxml2-2.7.8/include/libxml2
$ ls /.../software/libxml2-2.7.8/lib
libxml2.la
libxml2.so
libxml2.so.2
libxml2.so.2.7.8
pkgconfig
xml2Conf.h

But always the same problem :
$ gcc `xml2-config --libs` `xml2-config --cflags` src/main.c
/tmp/ccXlXfPu.o: In function `parseDoc':
...

I try with the -Wl and -t :
$ gcc -Wall -Wextra `xml2-config --cflags`  `xml2-config --libs` -Wl -t  -o 
xmlparsefile xmlparsefile-main.o
/usr/bin/ld: mode elf_i386
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crti.o
/usr/lib/gcc/i686-linux-gnu/4.6.1/crtbegin.o
-lxml2 (/auto/pierre/software/libxml2-2.7.8/lib/libxml2.so)
-lm (/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libm.so)
xmlparsefile-main.o
-lgcc_s (/usr/lib/gcc/i686-linux-gnu/4.6.1/libgcc_s.so)
/lib/i386-linux-gnu/libc.so.6
(/usr/lib/i386-linux-gnu/libc_nonshared.a)elf-init.oS
/lib/i386-linux-gnu/ld-linux.so.2
-lgcc_s (/usr/lib/gcc/i686-linux-gnu/4.6.1/libgcc_s.so)
/usr/lib/gcc/i686-linux-gnu/4.6.1/crtend.o
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crtn.o
xmlparsefile-main.o: In function `parseDoc':
main.c:(.text+0xd): undefined reference to `xmlParseFile'
main.c:(.text+0x51): undefined reference to `xmlCleanupParser'
main.c:(.text+0x63): undefined reference to `xmlFreeDoc'
main.c:(.text+0x68): undefined reference to `xmlCleanupParser'
/usr/bin/ld: link errors found, deleting executable `xmlparsefile'
collect2: ld returned 1 exit status

The order was automatically determined by my autotools (autoconf and automake).
I think there are in the good order.

Do you have any other idea to resolve this problem?

Thank you.

----- Mail original -----
De: "Ryan Mansfield" <[EMAIL PROTECTED]>
À: [EMAIL PROTECTED]
Envoyé: Mercredi 15 Février 2012 15:49:04
Objet: Re: The order of arguments differs

On 12-02-15 09:41 AM, [EMAIL PROTECTED] wrote:
> Hello,
>
> I am compiling a program on 2 computers.
>
> Table of contents
> 1. First computer
> 2. Second computer
> 3. Conclusion
>
> 1. First computer
>
> $ gcc src/main.c `xml2-config --libs` `xml2-config --cflags`
>
> Now with a different order of arguments :
> $ gcc `xml2-config --libs` `xml2-config --cflags` src/main.c
> /tmp/ccXlXfPu.o: In function `parseDoc':

> 3. Conclusion
>
> It's a big problem to have a different behaviour on each computer.

You're likely linking statically against libxml2 on the first computer,
and dynamically on the second. Check with -Wl,-t. Link order matters
when statically linking; the reference always has to come before the
symbol definition (unless you use -start-group/--end-group to have ld
make a second pass)

> Do you think it's a gcc problem?

No.

Regards,

Ryan Mansfield