fPIC Error

dlang user via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Nov 3 14:35:36 PDT 2016


On Thursday, 3 November 2016 at 06:11:48 UTC, rikki cattermole 
wrote:
> Took me a while to replicate your build environment but it 
> looks like a false alarm.
>
> rikki at debian:/tmp/test$ dmd test.d
> rikki at debian:/tmp/test$ file test
> test: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
> dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
> for GNU/Linux 2.6.32, 
> BuildID[sha1]=0a6394b9ec9b82e07440ab62cd71932f0ab568d1, not 
> stripped
>
> rikki at debian:/tmp/test$ ./test
> Edit source/app.d to start your project.
>
> rikki at debian:/tmp/test$ cat /etc/dmd.conf
> ;
> ; dmd.conf file for dmd
> ;
> ; dmd will look for dmd.conf in the following sequence of 
> directories:
> ;   - current working directory
> ;   - directory specified by the HOME environment variable
> ;   - directory dmd resides in
> ;   - /etc directory
> ;
> ; Names enclosed by %% are searched for in the existing 
> environment and inserted
> ;
> ; The special name %@P% is replaced with the path to this file
> ;
>
> [Environment32]
> DFLAGS=-I/usr/include/dmd/phobos 
> -I/usr/include/dmd/druntime/import -L-L/usr/lib/i386-linux-gnu 
> -L--export-dynamic -fPIC -defaultlib=libphobos2.so
>
> [Environment64]
> DFLAGS=-I/usr/include/dmd/phobos 
> -I/usr/include/dmd/druntime/import 
> -L-L/usr/lib/x86_64-linux-gnu -L--export-dynamic -fPIC 
> -defaultlib=libphobos2.so

Thanks for looking at it and confirming you are seeing the same 
thing.

I am no expert, but after some additional research I think I see 
what is going on.  From what I read the gcc -fPIC option creates 
a shared library, while gcc -fPIE option creates an executable.  
You can also create a dual purpose file that is a shared library 
and is also executable by creating a shared library if that file 
also contains a main function (that might be oversimplified a 
little bit).

Looking at the dmd documentation, it only has a -fPIC option, 
there is no -fPIE option, which has the following description:

generate Position Independent Code (which is used for building 
shared libraries).

So, if I am understanding everything correctly because dmd only 
has -fPIC, the only option is to create a dual purpose file that 
is both a shared library and executable.


More information about the Digitalmars-d-learn mailing list