[Qbs] Linking static lib with PkgConfig and --as-needed

dizygotheca dizygotheca at ntlworld.com
Sun Jan 15 02:42:36 CET 2017

I'm struggling to link a static lib that depends on an external library.

Using Qbs 1.7.0 with Gcc 5.4.0 on Linux.

It seems to me that PkgConfigProbe should strip "-l" out of the libs so 
that cpp.staticLibraries can be used. Disabling the as-needed shouldn't 
be necessary.

Or am I missing something ?

import qbs
import qbs.Probes as Probes

Project {
     minimumQbsVersion: "1.6"

     CppApplication {
         files: "main.cpp"
         Depends {name: "static"}
         cpp.linkerFlags: "-v"

     StaticLibrary {
         name: "static"
         Depends {name: "cpp"}
         files: "lib.*"

         Probes.PkgConfigProbe {id: ext; name: "libudev" }

         Export {
             // Q: How to export external link library dependancy ?
             Depends {name: "cpp"}
             // 1. Fails: Cannot find -l-ludev
//            cpp.staticLibraries: ext.libs
             // 2. Fails: linkerFlags appear before input artifacts
             //           so as-needed flag discards -ludev
//            cpp.linkerFlags: ext.libs
             // 3. Success, but only if we know lib name
//            cpp.staticLibraries: ext.found ? "udev" : original
             // 4. Success: work-around for wrong Qbs ordering
             cpp.linkerFlags: ["--no-as-needed"].concat(ext.libs)

#include "lib.h"

int main(int argc, char *argv[])

void open();

#include "lib.h"
#include <libudev.h>

void open()
     struct udev *udev = udev_new();

More information about the Qbs mailing list