help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CFLAGS/LDFLAGS for PIE vs PIC?


From: Bryan Ischo
Subject: Re: CFLAGS/LDFLAGS for PIE vs PIC?
Date: Sun, 01 Apr 2012 16:18:12 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111108 Thunderbird/8.0

On 04/01/12 11:30, Jeffrey Walton wrote:
Hi All,

I'm interested in trying to figure out how to "cleanly" set options
for CFLAGS (and CXXFLAGS) and LDFLAGS. I also want it to intelligently
apply to programs and shared objects. The problem I am having is
programs need:

   CFLAGS += -fPIE
   LDFLAGS += -pie

while shared objects need:

   CFLAGS += -fPIC
   LDFLAGS += -shared

So I can't run configure to set up a project properly:

$ configure CFLAGS="-Wall -Wextra -Wconversion -fPIE -pie
     -Wno-unused-parameter -Wformat=2 -Wformat-security
     -fstack-protector-all -Wstrict-overflow
     -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now"

I see others have also felt the same discomfort
(http://lists.fedoraproject.org/pipermail/devel-announce/2011-August/000821.html):

     "All of this is only an issue because most build systems don't
     let you say different CFLAGS or LDFLAGS for shared libraries
     and executables.  Sigh."

Any ideas?

Well, I don't use GNU autoconf for my projects, so I can't address that. What I do though is to specify different rules for object files that are to be linked into shared libraries than those to be built into executables. I use a different file extension for shared object files - typically, .po instead of .o - and then specify files with this extension as being the prerequisite for shared objects. My compile rule for building .po objects will include the -fPIC flag; the compile rule for building .o objects will not. If I am building the same library as both shared and static, the object files will be built twice - once as .po and once as .o - each to be linked into the corresponding shared or static library. Files that only ever link directly into executables are only ever built as .o files. I find this works very well. I don't know how, or if it's possible, to easily institute this policy in autoconf generated Makefiles.

Bryan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]