链接静态库而不是动态库

linking static library instead of dynamic

本文关键字:动态 静态 链接      更新时间:2023-10-16

我有一个名为FOO的目录,其中包含X.a和X.so。我只想选x。a。因此,在我的makefile中,我使用以下命令来链接它

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o $@ $< -static -lX

但是当我这样做时,我得到以下错误

/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc

这应该如何正确地做。一种方法是给出a的路径,还有别的方法吗?

试试这个:

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o $@ $< -Wl,-Bstatic -lX -Wl,-Bdynamic

如果我正确阅读ld的文档,您不必指定绝对路径,但您可以使用其全名指定库,如:

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o $@ $< -l:X.a