Skip to contentSkip to conversation

libcap: fix static linking issue

PATCH New Romain Naour 2 participants 8 messages Oct 6, 2013 – Nov 2, 2013

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 libcap: fix static linking issue

Add -fPIC flag

Fixes:
http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/

---
 package/libcap/libcap.mk | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
package/libcap/libcap.mk +6 -1
index 16afaef..6248fed 100644
@@ -25,10 +25,15 @@ endif
 # we don't have host-attr
 HOST_LIBCAP_DEPENDENCIES =
 
+ifeq ($(BR2_PREFER_STATIC_LIB),y)
+LIBCAP_LDFLAGS=-fPIC
+endif
+
 define LIBCAP_BUILD_CMDS
 	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \
 		LIBATTR=$(LIBCAP_HAVE_LIBATTR) BUILD_CC="$(HOSTCC)" \
-		BUILD_CFLAGS="$(HOST_CFLAGS)"
+		BUILD_CFLAGS="$(HOST_CFLAGS)" \
+		LDFLAGS="$(LIBCAP_LDFLAGS)"
 endef
 
 define LIBCAP_INSTALL_STAGING_CMDS
Signature · 1 line
1.8.4
#1 lore raw

PATCH 1/1 libcap: fix static linking issue

Dear Romain Naour,

Quoted 15 lines · Romain Naour

Add -fPIC flag

Fixes:
http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/

---
 package/libcap/libcap.mk | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
package/libcap/libcap.mk +0 -0
index 16afaef..6248fed 100644

package/libcap/libcap.mk endif · line 30

Quoted 6 lines
package/libcap/libcap.mk +3 -0
@@ -25,10 +25,15 @@ endif
 # we don't have host-attr
 HOST_LIBCAP_DEPENDENCIES =
 
+ifeq ($(BR2_PREFER_STATIC_LIB),y)
+LIBCAP_LDFLAGS=-fPIC
+endif

This seems really weird, because normally, we would expect exactly the
opposite: position independent code is needed for shared libraries, not for static libraries.

Thomas

Signature · 3 lines
Thomas Petazzoni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 libcap: fix static linking issue

Hi Thomas,

----- Mail original -----

| De: "Thomas Petazzoni" <[email protected]>
| ?: "Romain Naour" <[email protected]>
| Cc: "buildroot" <[email protected]>
| Envoy?: Dimanche 6 Octobre 2013 23:29:54
| Objet: Re: [Buildroot] [PATCH 1/1] libcap: fix static linking issue
| 
| Dear Romain Naour,
| 
| On Sun, 06 Oct 2013 22:10:24 +0200, Romain Naour wrote:
| > Add -fPIC flag
| > 
| > Fixes:
| > http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/
| > 
| > Signed-off-by: Romain Naour <[email protected]>
| > ---
| >  package/libcap/libcap.mk | 7 ++++++-
| >  1 file changed, 6 insertions(+), 1 deletion(-)
| > 
| > diff --git a/package/libcap/libcap.mk b/package/libcap/libcap.mk
| > index 16afaef..6248fed 100644
| > --- a/package/libcap/libcap.mk
| > +++ b/package/libcap/libcap.mk
| > @@ -25,10 +25,15 @@ endif
| >  # we don't have host-attr
| >  HOST_LIBCAP_DEPENDENCIES =
| > 
| > +ifeq ($(BR2_PREFER_STATIC_LIB),y)
| > +LIBCAP_LDFLAGS=-fPIC
| > +endif
| 
| This seems really weird, because normally, we would expect exactly
| the
| opposite: position independent code is needed for shared libraries,
| not
| for static libraries.

Ok, I'll take the problem from the beginning.
Sorry for that mistake.

Best regards,
Romain

| 
| Thomas
| --
| Thomas Petazzoni, Free Electrons
| Embedded Linux, Kernel and Android engineering
| http://free-electrons.com
| 
#3 lore raw

PATCH 1/1 libcap: fix static linking issue

Dear Romain Naour,

Quoted 10 lines · Romain Naour
| > +ifeq ($(BR2_PREFER_STATIC_LIB),y)
| > +LIBCAP_LDFLAGS=-fPIC
| > +endif
| 
| This seems really weird, because normally, we would expect exactly
| the
| opposite: position independent code is needed for shared libraries,
| not
| for static libraries.
Quoted 2 lines

Ok, I'll take the problem from the beginning.
Sorry for that mistake.

Note that I'm not sure about what I said, but having to build with -fPIC in the static lib case seems really strange.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#4 lore raw

PATCH 1/1 libcap: fix static linking issue

Hi,

Le 08/10/2013 10:13, Thomas Petazzoni a ?crit :

Quoted 17 lines

Dear Romain Naour,

Quoted 10 lines · Romain Naour
| > +ifeq ($(BR2_PREFER_STATIC_LIB),y)
| > +LIBCAP_LDFLAGS=-fPIC
| > +endif
| 
| This seems really weird, because normally, we would expect exactly
| the
| opposite: position independent code is needed for shared libraries,
| not
| for static libraries.
Quoted 2 lines

Ok, I'll take the problem from the beginning.
Sorry for that mistake.

Quoted 7 lines

Note that I'm not sure about what I said, but having to build with -fPIC in the static lib case seems really strange.

Thanks!

Thomas

You're right, the static lib isn?t built with -fPIC. But the libcap build system build the static and shared libraries, even if you don't want one of them.

The build failure [1] is caused by the missing -fPIC during the build of libcap.so.2.22

So, we may add -fPIC if BR2_PREFER_STATIC_LIB=y and the shared lib is build correctly (ok it's weird)
Or add a patch for enable/disable separately the static/shared build.

Best regards,
Romain Naour

[1] http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/

#5 lore raw

PATCH 1/1 libcap: fix static linking issue

Dear Romain Naour,

Quoted 9 lines · Romain Naour

You're right, the static lib isn?t built with -fPIC. But the libcap build system build the static and shared libraries, even if you don't want one of them.

The build failure [1] is caused by the missing -fPIC during the build of libcap.so.2.22

So, we may add -fPIC if BR2_PREFER_STATIC_LIB=y and the shared lib is build correctly (ok it's weird)
Or add a patch for enable/disable separately the static/shared build.

If BR2_PREFER_STATIC_LIB=y, then not shared library should be built at all. Even though the naming of the option doesn't make it clear for the moment.

And therefore, when BR2_PREFER_STATIC_LIB=y, passing -fPIC should not be needed, as we're building only static libraries.

I had a quick look at libcap, and we can easily build only the static or shared library by doing the $(MAKE) only in $(@D)/libcap, and using the libcap.a and libcap.so targets. But the install target is not really adapted to that, so we would have to install things manually.

Maybe a little patch to the libcap/Makefile which understands BUILD_STATIC and BUILD_SHARED variables would be good.

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#6 lore raw

PATCH 1/1 libcap: fix static linking issue

In reply to Romain Naour

Dear Romain Naour,

Quoted 6 lines · Romain Naour

Add -fPIC flag

Fixes:
http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/

I've just sent a patch which I believe is a better fix than this one. The problem was that libcap was building the shared library unconditionally. By adjusting the libcap build system, we can make it build only the static library, and therefore make things work properly.

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#7 lore raw

PATCH 1/1 libcap: fix static linking issue

Le 01/11/2013 18:48, Thomas Petazzoni a ?crit :

Quoted 9 lines

Dear Romain Naour,

Quoted 6 lines · Romain Naour

Add -fPIC flag

Fixes:
http://autobuild.buildroot.net/results/619bceb3491ecd2ed4e1ae552fdb237a0ed2fa47/

Quoted 8 lines

I've just sent a patch which I believe is a better fix than this one. The problem was that libcap was building the shared library unconditionally. By adjusting the libcap build system, we can make it build only the static library, and therefore make things work properly.

Best regards,

Thomas

Hi Thomas,

I haven't take time to rework on this path :-/
Thanks.

Best regards,
Romain