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

  • Thread starter Iñaki Baz Castillo
  • Start date
I

Iñaki Baz Castillo

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 =3D -fPIC
[..]
c.lo:
$(CC) $(CFLAGS) $(PICFLAGS) $(CDEFS) -o $@ -c $<
-------------------------------------------------


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

--=20
I=C3=B1aki Baz Castillo
<[email protected]>
 
I

Iñaki Baz Castillo

2011/2/5 I=C3=B1aki Baz Castillo said:
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:

=C2=A0have_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.

--=20
I=C3=B1aki Baz Castillo
<[email protected]>
 
R

Ralf Mueller

=20
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.
=20

Try '-fPIC -DPIC'.

regards
ralf
 
I

Iñaki Baz Castillo

2011/2/7 Ralf Mueller said:
Try '-fPIC -DPIC'.

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.



--=20
I=C3=B1aki Baz Castillo
<[email protected]>
 
P

Peter Zotov

Re: C extension: R_X86_64_32 problem when inlcuding a xxxxx.alibrary (64 bits SO)
 
P

Peter Zotov

2011/2/7 Peter Zotov <[email protected]>:
=20
Empty body :)
=20
=20

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.

--=20
WBR, Peter Zotov
 
I

Iñaki Baz Castillo

2011/2/7 Peter Zotov said:
I was asking if you can post your code somewhere so we can get
hands on it instead of blindly guessing.

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

Thanks.

--=20
I=C3=B1aki Baz Castillo
<[email protected]>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,954
Messages
2,570,116
Members
46,704
Latest member
BernadineF

Latest Threads

Top