如何告诉ld在哪里找到libc

时间:2012-08-02 17:12:00

标签: c++ gcc linker clang opensuse

所以我今天在C ++中创建了一个带有一些基本辅助功能的静态库。我用Clang 3.2(SVN快照)构建它。但是,当我尝试运行链接到它的测试程序(prog.cpp)时,我收到以下错误:

~/Projects/CPP/AssisterLib> g++ prog.cpp -o program -static -L. -lassister
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lm
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lc
collect2: ld returned 1 exit status

我在使用G ++和Clang ++时遇到了同样的错误。显然它找不到libc.a和libm.a,它们都在/ usr / lib64中(由OpenSUSE中的glibc-devel提供)。添加-L/usr/lib64不会对错误产生任何影响。

为什么不能找到那些库?有没有我失踪的旗帜?

1 个答案:

答案 0 :(得分:3)

问题可能是使用-static。我会得出结论,您没有安装libmlibc的静态版本。您可以尝试删除-static进行确认。

-static标志向编译器发出信号,表明您希望可执行文件完全静态链接,因此如果并非所有库都具有静态版本,则会失败。