GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。
所以如果是
g++ testlog.cpp -lglog 那么会优先使用动态库。
想要指定使用静态库
可以使用全名的静态库。
g++ testlog.cpp /usr/lib/aarch64-linux-gnu/libglog.a /usr/lib/aarch64-linux-gnu/libgflags.a
还有一种就是用链接选项-Wl,-Bstatic
GCC/G++也提供了链接选项 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用户指定链接动态库或者静态库。
-Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库,-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库。
如下,前面的 -Wl,-Bstatic指示链接libtest.a静态库,后面的 -Wl,-Bdynamic指示链接系统动态库。
g++ testlog.cpp -Wl,-Bstatic -lglog -lgflags -Wl,-Bdynamic
如果后面不加 -Wl,-Bdynamic,那么所有的库,包括系统库也需要静态链接,如果找不到会报错,如下。 所以使用了-Wl,-Bstatic后需要再使用-Wl,-Bdynamic
uranus@ubuntu:~/code/test$ g++ testlog.cpp -Wl,-Bstatic -lglog -lgflags
/usr/bin/ld: cannot find -lgcc_s: No such file or directory
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/11/../../../aarch64-linux-gnu/libglog.a(utilities.cc.o): in function `google::glog_internal_namespace_::MyUserNameInitializer()':
(.text.startup+0xdc): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: cannot find -lgcc_s: No such file or directory
collect2: error: ld returned 1 exit status