我正在调试一个库链接问题,我遇到了一些我没想到的东西。这是问题所在。我正在使用构建工具来生成我的 Makefile,所以我只需要编写 Makefile.am。最终目标是构建一个共享库(srv.so)。我想静态链接一些库,所以我想使用“静态”标志到 LD。我的 Makefile.am 有这样的 LD_FLAGS
srv_la_LDFLAGS= -module -avoid-version
现在,当我添加“静态”标志时,它变成了我们有 2 种单独的解释
第一
srv_la_LDFLAGS= -module -avoid-version -static /path/to/lib.a
第二
srv_elastica_la_LDFLAGS= -module -avoid-version --static /path/to/lib.a
注意--static和-static之间的区别。
第一个生成运行ar的链接器行并尝试生成srv.a而不是srv.so
/bin/bash ../../libtool --tag=CC --mode=link gcc -I../../include/
-Wno-unused-label -DMONGO_HAVE_STDINT -g -O2 -Wall -D_REENTRANT -g -O2 -Wall
-DCI_BUILD_MODULE -I/usr/local /c_icap/include/c_icap -module -avoid-version -z defs
-static /usr/local/lib/libmongoc.a -o srv.la -rpath /usr/local/lib/c_icap_modules
srv_la-srv.lo -lrt -lcre2 -lre2 -lcurl -lpthread -lbson
*** Warning: Linking the shared library srv_elastica.la against the
*** static library /usr/local/lib/libmongoc.a is not portable!
libtool: link: ar cru .libs/srv.a /usr/loc/lib/libmongoc.a
.libs/srv_la-srv.o
而第二个生成正确的链接器行(-shared )以输出srv.so
/bin/bash ../../libtool --tag=CC --mode=link gcc -I../../include/ -Wno-unused-label
-DMONGO_HAVE_STDINT -g -O2 -Wall -D_REENTRANT -g -O2 -Wall -DCI_BUILD_MODULE -I/usr
/local/c_icap/include/c_icap -module -avoid-version -z defs --static /usr/local
/lib/libmongoc.a -o srv.la -rpath /usr/local/lib/c_icap_modules srv_la-srv.lo
-lrt -lcre2 -lre2 -lcurl -lpthread -lbson
*** Warning: Linking the shared library srv_elastica.la against the
*** static library /usr/local/lib/libmongoc.a is not portable!
libtool: link: gcc -shared -fPIC -DPIC .libs/srv_la-srv.o
/usr/local/lib/libmongoc.a -lrt -lcre2 -lre2 /usr/lib/x86_64-linux-gnu/libcurl.so
-lpthread -lbson -O2 -O2 -Wl,-soname -Wl,srv.so -o .libs/srv.so
这有点奇怪。这种类型的ld的联机帮助页上没有提到任何内容。有什么帮助吗?