[Top][All Lists]

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


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

     "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.


reply via email to

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