Can I mix static and shared-object libraries when linking?

34,426

Looking at this thread you can see that it can be done. The guys at GNU suggest

gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe
Share:
34,426
SiegeX
Author by

SiegeX

Certified LabVIEW Developer Certified LabVIEW Instructor Email me at: [email protected]

Updated on March 18, 2020

Comments

  • SiegeX
    SiegeX about 4 years

    I have a C project that produces ten executables, all of which I would like to be linked in statically. The problem I am facing is that one of these executables uses a 3rd-party library of which only the shared-object version is available.

    If I pass the -static flag to gcc, ld will error saying it can't find the library in question (I presume it's looking for the .a version) and the executable will not be built. Ideally, I would like to be able to tell 'ld' to statically link as much as it can and fail over to the shared object library if a static library cannot be found.

    In the interium I tried something like gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe in hopes that 'ld' would statically link in lib1 and lib2 but only have a run-time dependence on lib3rdparty. Unfortunatly, this did not work as I intended; instead the -shared flag overwrote the -static flag and everything was compiled as shared-objects.

    Is statically linking an all-or-nothing deal, or is there some way I can mix and match?

  • Heston T. Holtmann
    Heston T. Holtmann about 10 years
    Is there a missing "-l" prefix on the list of libs following "-Wl,-Bstatic <list of libs>; should it be: -Wl,-Bstatic -llib2 -llib2 -llib3 ???
  • Anthony
    Anthony about 10 years
    @HestonT.Holtmann It's implied, but I'll fix it up so it's clearer.
  • zappy
    zappy almost 6 years
    @Anthony How to do the same with LDFLAGS ?