2011-12-06 158 views
2

我有一个名为FOO的目录,它具有X.a和X.so。我只想选择X.a. 所以在我的makefile我使用下列到链接静态库而不是动态链接

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -static -lX 

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

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

如何来做好。一种方法是给X.a.有没有其他的方法?

+1

链接器没有发现Xa的问题,它抱怨其他库。我认为你也应该添加这些路径(使用-L)。 – kol

回答

2

试试这个:

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -Wl,-Bstatic -lX -Wl,-Bdynamic 
+0

谢谢Jack ...它的工作...你能解释一下'-Wl,-Bstatic -lX的含义吗 - Wl,-Bdynamic'? – amneet

+0

'-Wl,-Bstatic':'-Wl'表示该标志需要发送给链接器,'-Bstatic'开启静态链接。 '-lX'是'libX'中链接的正常标志。 '-Wl,-Bdynamic'发送'-Bdynamic'标志给链接器,动态链接所有其他库。 –

0

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

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -l:X.a 
+0

这不起作用。错误: '/ usr/bin/ld:找不到X.a' – amneet

+0

至少这意味着链接器现在试图链接到静态库,就像你想要的;不幸的是它找不到它。你确定-L交换机的路径是正确的吗? – eriktous

+0

是的,我很确定。 – amneet