[Bug driver/70419] descriptions of -fpic/-fPIC and -fpic/-fPIE aren't clear and contain syntax error
balint at balintreczey dot hu
gcc-bugzilla@gcc.gnu.org
Sun Nov 6 15:22:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70419
--- Comment #2 from Balint Reczey <balint at balintreczey dot hu> ---
(In reply to Balint Reczey from comment #1)
> Also please fix the error message emitted when trying to link a non-PIE
> non-PIC static library to a position independent executable:
>
> $ cat m.c
> #include <zlib.h>
>
> int main() {
> gzopen(0,0);
> return 1;
> }
>
> $gcc -pie m.c -lz
> /usr/bin/ld: /tmp/cchMINoQ.o: relocation R_X86_64_PC32 against undefined
> symbol `gzopen' can not be used when making a shared object; recompile with
> -fPIC
> /usr/bin/ld: final link failed: Bad value
> collect2: error: ld returned 1 exit status
> $ gcc --version
> gcc (Debian 6-20160228-1) 6.0.0 20160228 (experimental) [trunk revision
> 233789]
>
> One better error message could be:
> `gzopen' can not be used when making a position independent executable;
> recompile with -fPIC or -fPIE
>
> I can open a separate bug for that but this is closely related to the
> clarifications asked here.
The correct myself the error was about not compiling m.c with -fPIE but the
error is still misleading.
The fix is the following, compiling as PIE, linking with shared libz:
$gcc -pie -fPIE m.c -lz
The other misleading error message about the static library lacking -fPIE can
be triggered this way:
$ gcc -pie -fPIE m.c /usr/lib/x86_64-linux-gnu/libz.a
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libz.a(gzlib.o): relocation R_X86_64_32S
against `.rodata' can not be used when making a shared object; recompile with
-fPIC
/usr/lib/x86_64-linux-gnu/libz.a: error adding symbols: Bad value
More information about the Gcc-bugs
mailing list