|
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
[Prev in Thread] | Current Thread | [Next in Thread] |