nurxb01
nurxb01

Reputation: 93

How to modify options being passed to ld , without recompiling gcc

I'm trying to compile shared library on solaris 2.7 using gcc 3.4.6 and which is linking to a statically linked c .a and .o files. Please note that it is using Sun ld from path "/usr/ccs/bin/ld"

At linking time i got a long list of symbols and following error

ld: fatal: relocations remain against allocatable but non-writable sections

collect2: ld returned 1 exit status

Then i tried to build it passing -z textoff option to ld. but i'm getting follwing error

ld: fatal: option -ztextoff and -ztext are incompatible

ld: fatal: Flags processing errors

Is there any other way where i don't need to recompile gcc and still modify the options getting passed to ld.

Upvotes: 0

Views: 4087

Answers (3)

Employed Russian
Employed Russian

Reputation: 213897

The errors are the result of linking position-dependent code into a shared library. Such code will result in the library not being shareable, and thus wasting RAM.

If you can rebuild all the objects you are trying to link into the shared library, the simplest (and most correct) solution is to rebuild all of them with -fPIC flag.

However, sometimes you really must link non-PIC object code which you can't rebuild into a shared library, and therefore you need to get rid of the -ztext option. To do that, add -mimpure-text option to your link line.

Upvotes: 4

Loki Astari
Loki Astari

Reputation: 264649

Are you using make or some other build system to invoke the compiler?

If you change the options in the build system to specifically use the linker during the link phase rather than using the compiler.

Step 1: Find flags passed by gcc

Add the -v flag. It makes gcc verbose.

CXXFLAGS += -v

Step 2: Modify the link stage to explicitly use the tool that gcc was invoking.

Upvotes: 0

anon
anon

Reputation:

Run the ld executable from the command line (not via gcc) - you can then pass it whatever parameters you want. I don't think that will solve your underlying problems though - you might want to post a question about them.

Upvotes: 0

Related Questions