g++ linker: force static linking if static library exists?

后端 未结 2 1094
礼貌的吻别
礼貌的吻别 2020-12-04 06:41

I\'ve a program which links to many libraries. g++, by default, prefers to link to shared libraries, even if the corresponding archive exists.

How can I

相关标签:
2条回答
  • 2020-12-04 07:21
    g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
    

    Will link zlib and libfoo as static, and libbar as dynamic . --as-needed will drop any unused dynamic library.

    0 讨论(0)
  • 2020-12-04 07:41

    When you only want to statically link one or two libraries with the rest, including system libraries, being dynamic, it is often easier to simply reference the static library by its full name. I.e. rather than use -l and -L to get g++ to resolve a library from what it finds, simpy add the full path to the library as an input. Taking the g++ command above, to link a main.o application main program to static libz and libfoo and dynamic libbar and libglib etc. :

        g++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar
    

    Edit 3 Aug 17: I've just tripped across this answer which goes into more detail and offers an alternative way (-l:) to specify the library directly.

    0 讨论(0)
提交回复
热议问题