Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > C extension: R_X86_64_32 problem when inlcuding a xxxxx.a library(64 bits SO)

Reply
Thread Tools

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

 
 
Iñaki Baz Castillo
Guest
Posts: n/a
 
      02-05-2011
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
<(E-Mail Removed)>

 
Reply With Quote
 
 
 
 
Iñaki Baz Castillo
Guest
Posts: n/a
 
      02-05-2011
2011/2/5 I=C3=B1aki Baz Castillo <(E-Mail Removed)>:
> 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
<(E-Mail Removed)>

 
Reply With Quote
 
 
 
 
Ralf Mueller
Guest
Posts: n/a
 
      02-07-2011
On Sun, 6 Feb 2011 06:38:26 +0900
I=C3=B1aki Baz Castillo <(E-Mail Removed)> wrote:

> 2011/2/5 I=C3=B1aki Baz Castillo <(E-Mail Removed)>:
> > 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")

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

 
Reply With Quote
 
Iñaki Baz Castillo
Guest
Posts: n/a
 
      02-07-2011
2011/2/7 Ralf Mueller <(E-Mail Removed)>:
> 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
<(E-Mail Removed)>

 
Reply With Quote
 
Peter Zotov
Guest
Posts: n/a
 
      02-07-2011


 
Reply With Quote
 
Iñaki Baz Castillo
Guest
Posts: n/a
 
      02-07-2011
2011/2/7 Peter Zotov <(E-Mail Removed)>:

Empty body


--=20
I=C3=B1aki Baz Castillo
<(E-Mail Removed)>

 
Reply With Quote
 
Peter Zotov
Guest
Posts: n/a
 
      02-07-2011
On Mon, 7 Feb 2011 21:52:18 +0900
I=C3=B1aki Baz Castillo <(E-Mail Removed)> wrote:

> 2011/2/7 Peter Zotov <(E-Mail Removed)>:
>=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

 
Reply With Quote
 
Iñaki Baz Castillo
Guest
Posts: n/a
 
      02-08-2011
2011/2/7 Peter Zotov <(E-Mail Removed)>:
> 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
<(E-Mail Removed)>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
relocation R_X86_64_32 against `a local symbol' can not be used whenmaking a shared object; recompile with -fPIC tkevans Python 0 02-11-2009 12:56 AM
shifting bits, shift 32 bits on 32 bit int GGG C++ 10 07-06-2006 06:09 AM
8 bits/ch vs 16 bits/ch in PS Terry Digital Photography 5 01-21-2004 06:59 PM
8-Bits vs 12 or 16 bits/pixel; When does more than 8 bits count ? Al Dykes Digital Photography 3 12-29-2003 07:08 PM
win XP 32 bits on a 64 bits processor.. Abbyss Computer Support 3 11-13-2003 12:39 AM



Advertisments