C extension: R_X86_64_32 problem when inlcuding a xxxxx.a library (64 bits SO)

Hi, I must include a header (udns.h) and library (libudns.a) in a Ruby
C extension (Linux 64 bits).

In extconf.rb I set:

  have_library("udns")

"ruby extconf" creates the Makefile:

···

--------------------------------
checking for main() in -ludns... yes
creating Makefile
--------------------------------

but "make" command fails:
-------------------------------
gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux
-I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I.
-fPIC -fno-strict-aliasing -g -g -O2 -fPIC -o em_udns.o -c em_udns.c
gcc -shared -o em_udns.so em_udns.o -L. -L/usr/lib -L. -rdynamic
-Wl,-export-dynamic -lruby-1.9.1 -ludns -lpthread -lrt -ldl -lcrypt
-lm -lc
/usr/bin/ld: ./libudns.a(udns_resolver.o): relocation R_X86_64_32
against `dns_defctx' can not be used when making a shared object;
recompile with -fPIC
./libudns.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
-------------------------------

I know that "relocation R_X86_64_32" issue occurs with some libraries
in 64 bits and -fPIC is required. However AFAIK the above gcc command
does include -fPIC, am I right?

Anyhow, I can compile a pure C file (no Ruby) in a folder with these files:
- play1.c
- udns.h
- libudns.a
by running: gcc play1.c -L. -ludns libudns.a -o play1

And the resulting "play1" executable works ok.

libudns.a has been compiled with library provided "configure", and its
Makefile does contain -fPIC option:
-------------------------------------------------
PICFLAGS = -fPIC
[..]
.c.lo:
        $(CC) $(CFLAGS) $(PICFLAGS) $(CDEFS) -o $@ -c $<
-------------------------------------------------

I'm a bit lost here, any help please?

--
Iñaki Baz Castillo
<ibc@aliax.net>

I must add that if I install the Debian/Ubuntu package libudns-dev
(which install both a dynamic libudns.so and a static libudns.a) then
my Ruby C extension compiles correctly.

···

2011/2/5 Iñaki Baz Castillo <ibc@aliax.net>:

Hi, I must include a header (udns.h) and library (libudns.a) in a Ruby
C extension (Linux 64 bits).

In extconf.rb I set:

have_library("udns")

--
Iñaki Baz Castillo
<ibc@aliax.net>

Try '-fPIC -DPIC'.

regards
ralf

···

On Sun, 6 Feb 2011 06:38:26 +0900 Iñaki Baz Castillo <ibc@aliax.net> wrote:

2011/2/5 Iñaki Baz Castillo <ibc@aliax.net>:
> Hi, I must include a header (udns.h) and library (libudns.a) in a
> Ruby C extension (Linux 64 bits).
>
> In extconf.rb I set:
>
> have_library("udns")

I must add that if I install the Debian/Ubuntu package libudns-dev
(which install both a dynamic libudns.so and a static libudns.a) then
my Ruby C extension compiles correctly.

Same error even if I've tryed that in the Makefile of libudns.a and
also in the Ruby extension Makefile. Same output as before (but now
with -DPIC):

gcc -I. -I/usr/include/ruby-1.9.1/x86_64-linux
-I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I.
-fPIC -DPIC -fno-strict-aliasing -g -g -O2 -fPIC -DPIC -o em-udns.o
-c em-udns.c
gcc -shared -o em_udns_ext.so em-udns.o -L. -L/usr/lib -L. -rdynamic
-Wl,-export-dynamic -lruby-1.9.1 -ludns -lpthread -lrt -ldl -lcrypt
-lm -lc
/usr/bin/ld: ./libudns.a(udns_resolver.o): relocation R_X86_64_32
against `dns_defctx' can not be used when making a shared object;
recompile with -fPIC
./libudns.a: could not read symbols: Bad value

Thanks.

···

2011/2/7 Ralf Mueller <ralf.mueller@zmaw.de>:

Try '-fPIC -DPIC'.

--
Iñaki Baz Castillo
<ibc@aliax.net>

Empty body :slight_smile:

···

2011/2/7 Peter Zotov <whitequark@whitequark.org>:

--
Iñaki Baz Castillo
<ibc@aliax.net>

Oh, sorry. That happens somehow. I hope that mailman upgrade will fix
it. I was asking if you can post your code somewhere so we can get
hands on it instead of blindly guessing.

···

On Mon, 7 Feb 2011 21:52:18 +0900 Iñaki Baz Castillo <ibc@aliax.net> wrote:

2011/2/7 Peter Zotov <whitequark@whitequark.org>:

Empty body :slight_smile:

--
  WBR, Peter Zotov

Ok, I'll try to reduce my code and show it. Let me some time to do it.

Thanks.

···

2011/2/7 Peter Zotov <whitequark@whitequark.org>:

I was asking if you can post your code somewhere so we can get
hands on it instead of blindly guessing.

--
Iñaki Baz Castillo
<ibc@aliax.net>