【问题标题】:Compiling: //lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing编译://lib/x86_64-linux-gnu/libm.so.6:添加符号时出错:缺少 DSO
【发布时间】:2015-07-12 21:03:37
【问题描述】:

我无法在我的 64 位 Ubuntu、Linux 上编译用于 32 位 unix 系统的代码。有没有人知道可能是什么问题?

gcc main.o test.o render.o transform.o model.o vector.o color.o -o the_thing -lSDL
/usr/bin/ld: transform.o: undefined reference to symbol 'cos@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

【问题讨论】:

  • 错误信息告诉你在命令行中添加/lib/x86_64-linux-gnu/libm.so.6(或者更好的是短版-lm)...

标签: ubuntu gcc 64-bit libraries libm


【解决方案1】:

在处理使用数学函数的代码时,您也应该链接libm

来自this answer

如果您的代码包含数学函数(如 exp、cos 等), 您需要链接到数学库 libm.so。这个做完了, 就像串行编译一样,通过将 -lm 添加到您的末尾 编译命令,即

mpicc -o 示例 sample.c -lm

加分

我在您的编译行中看到您正在使用 -lSDL。 SDL 适用于 C 和 C++,因此,如果您使用纯 C,则应包含默认的数学 C 标头,即:

#include <math.h>

我认为你做了这样的事情:

#include <cmath>

如果您使用 C++,则不应使用 C 编译器进行编译,而应使用 g++

【讨论】:

    【解决方案2】:

    您可以使用-lm 参数编译您的代码。

    gcc file.c -lm

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2014-11-19
      • 2019-07-04
      • 2021-09-29
      • 2016-09-27
      • 2020-10-26
      • 2012-11-27
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多