PGI User Forum
 SearchSearch   MemberlistMemberlist     RegisterRegister   ProfileProfile    Log inLog in 

Free OpenACC Webinar

pgc++ - relocation R_X86_64_PC32 against "..." can

 
Post new topic   Reply to topic    PGI User Forum Forum Index -> Programming and Compiling
View previous topic :: View next topic  
Author Message
kzhu



Joined: 03 Jun 2013
Posts: 4

PostPosted: Thu Jun 06, 2013 7:05 am    Post subject: pgc++ - relocation R_X86_64_PC32 against "..." can Reply with quote

Hi all,

I used pgc++ to create the object files, (with -fPIC flag for all object files). At the linking stage, I received the following error message.

Code:

 /home/kzhu/pgi/linux86-64/13.5/bin/pgc++ -shared -o libcore.so
 -pthread -m64 -L/home/kzhu/pgi/linux86-64/13.5/lib64 -fPIC -lpthread -lc -lm -lcrypt -lrt -ldl -rpath /some_path xxx.o yyy.o zzz.o

... ...

/usr/bin/ld: zzz.o: relocation R_X86_64_PC32 against `... ...' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
*** Error code 2


Any suggestion on possible cause of this linking error is appreciated. For the reference, the linker that I used is
Code:

-bash-3.2$ /usr/bin/ld --version
GNU ld version 2.17.50.0.6-20.el5_8.3 20061020
Copyright 2005 Free Software Foundation, Inc.


Many thanks.


Kevin
Back to top
View user's profile
mkcolg



Joined: 30 Jun 2004
Posts: 6216
Location: The Portland Group Inc.

PostPosted: Thu Jun 06, 2013 1:23 pm    Post subject: Reply with quote

Hi Kevin,

I typically see this error when you have a very large static array (>2GB) in the code. In this case, you need use the medium memory model (-mcmodel=medium).

If that doesn't work, I'll need you to send a report to PGI Customer Service (trs@pgroup.com) and include a reproducing example to determine the cause, or the the following information.

The output from:
pgc++ -c t.c -dryrun

As well as the post processed source files:
pgc++ -C -E <user_flags> xxx.c -o outx.i
pgc++ -C -E <user_flags> yyy.c -o outy.i
pgc++ -C -E <user_flags> zz.c -o outz.i

Note that pgc++ doesn't accept the "-pthread" flag, hence you should be getting a compilation error if you use it.

- Mat
Back to top
View user's profile
kzhu



Joined: 03 Jun 2013
Posts: 4

PostPosted: Thu Jun 06, 2013 4:40 pm    Post subject: Reply with quote

Hi Mat,

Thank you for the pointers.

For the record, the object files are less than 2~GB. I tried the -mcmodel flag anyway, but it was not compatible with -fPIC that I needed.

Surprisingly, I did not get a compilation error with "-pthread". To be on the safe side, I removed the -pthread flag when generating the object files. This did not affect the "relocation R_X86_64_PC32 against ... " error at the linking stage.


Kevin
Back to top
View user's profile
jtull



Joined: 30 Jun 2004
Posts: 445

PostPosted: Thu Jun 06, 2013 5:24 pm    Post subject: Reply with quote

Always put the *.o files before any libs in a link line creating the shared libs.

xxx.o yyy.o and zzz.o should be compiled -fPICto be put into a shared library.

Objects compiled -mcmodel=medium can never be put into a shared library -
the have a 64-bit offset field, and linking with 32-bit offset fields causes
'relocation R_X86_64_PC32 truncated to fit' messages.

The only objects that can be linked with objects compiled -mcmodel=medium are

1. other objects compiled -mcmodel=medium
2. objects compiled -fPIC and put into a shared lib.

====================================
if you can avoid -mcmodel=medium in your main code, you are better off.

if you require large arrays, dynamically allocated them at runtime.

routines in shared libs like foo

subroutine foo(x,y,z,n)
integer*8 n,i
real*8 x(n), y(n), z(n)
do i=1,n
z(i)-x(i)+y(i)
end do
return
end subroutine foo

should be compiled
-fPIC -Mlarge_arrays

before being put into a shared library.

Then you can pass small or large arrays to foo, and things
should work as expected.
Back to top
View user's profile
Display posts from previous:   
Post new topic   Reply to topic    PGI User Forum Forum Index -> Programming and Compiling All times are GMT - 7 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group