所以我今天在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
不会对错误产生任何影响。
为什么不能找到那些库?有没有我失踪的旗帜?
答案 0 :(得分:3)
问题可能是使用-static
。我会得出结论,您没有安装libm
和libc
的静态版本。您可以尝试删除-static
进行确认。
-static
标志向编译器发出信号,表明您希望可执行文件完全静态链接,因此如果并非所有库都具有静态版本,则会失败。