如何在gcc中将静态库链接到动态库

在gcc(g ++)下,我编译了一个静态.a(称为some_static_lib.a)库。我想将此.a文件链接(是正确的短语吗?)到libsomeDyn.so我正在构建的另一个动态库(称为)中。虽然可以.so编译,但我看.a不到.so使用nm命令的内容:


/ usr / bin / g ++ -fPIC -g -O2 -Wall -Werror -pipe -march = pentium3 -mtune = prescott -MD -D_FILE_OFFSET_BITS = 64 -DLINUX -D_GNU_SOURCE -D_THREAD_SAFE -I ../..../。 ./../../../../ -I ../../../../../../../..// libraries -Wl,-rpath,/ usr / lib -o libsomeDyn.so some.o another.o some_static_lib.a -shared -Wl -x -Wl,-soname,libsomeDyn.so


我看不出在功能some_static_lib.a下libsomeDyn.so。我究竟做错了什么?


慕勒3428872
浏览 1200回答 3
3回答

绝地无双

静态库在链接时有特殊的规则。如果静态库中的对象提供了未解析的符号,则该对象只会添加到二进制文件中。在Linux上,您可以使用--whole-archive链接器选项更改该行为:g++ -Wl,--whole-archive some_static_lib.a -Wl,--no-whole-archive
打开App,查看更多内容
随时随地看视频慕课网APP