标签: libm

编译://lib/x86_64-linux-gnu/libm.so.6:添加符号时出错:缺少DSO

我在 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
Run Code Online (Sandbox Code Playgroud)

ubuntu 64-bit gcc libraries libm

5
推荐指数
1
解决办法
2万
查看次数

为什么它不需要链接libm?

#include <math.h>
#include <stdio.h>
int main()
{
   printf("%f", roundf(3.14));
}
Run Code Online (Sandbox Code Playgroud)

我编译上面的代码(没有使用-lm),添加使用ldd a.out,结果是

linux-vdso.so.1 =>  (0x00007fffab9ff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd6da0f8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd6da4eb000)
Run Code Online (Sandbox Code Playgroud)

为什么a.out没有与libm链接但可以使用roundf(或类似sqrt)?我使用nm来测试libc.so.6和ld-linux-x86064.so.2但是所有这些都没有roundf的符号.

我想知道roundf定义在哪里,或者它是否被编译器内联?(用gcc 4.7.3和gcc 4.6.3测试)


答案是http://fedoraproject.org/w/index.php?title=UnderstandingDSOLinkChange

c c++ gcc libm

4
推荐指数
1
解决办法
1527
查看次数

gcc在使用fmod()时出错

fmod的示例代码:

#include <stdio.h>    
#include <math.h>

int main(void)   
{    
  double x = 0.14527, y = 3.14159;   
  printf("fmod(x, y) = %.6lf\n", fmod(x, y));    
  return 0;    
}
Run Code Online (Sandbox Code Playgroud)

编译:

$ gcc main.c -o main
Run Code Online (Sandbox Code Playgroud)

我明白了

/tmp/ccztJO01.o:在函数`main'中:

main.c :(.text + 0x4d):对`fmod'的未定义引用

collect2:ld返回1退出状态

然后我在谷歌发现了这个:

$ gcc -lm main.c -o main
Run Code Online (Sandbox Code Playgroud)

我为什么要使用-lm,究竟是什么?从哪里可以获得有关gcc的更多信息?

c gcc ld modulo libm

3
推荐指数
3
解决办法
7123
查看次数

jq:错误:round/0 未在 &lt;top-level&gt; 定义

jq 中的 round 函数不起作用。

$ jq '10.01 | round'
jq: error: round/0 is not defined at <top-level>, line 1:
10.01 | round        
jq: 1 compile error

$ jq --help
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Run Code Online (Sandbox Code Playgroud)

我需要做什么?

rounding libm jq

3
推荐指数
1
解决办法
1177
查看次数

我应该如何获得浮点值的小数部分?

我有一个xtype变量float,我需要它的小数部分。我知道我可以得到它

  • x - floorf(x), 或者
  • fmodf(x, 1.0f)

我的问题:其中一个总是比另一个更可取吗?它们实际上是一样的吗?我可以考虑第三种选择吗?

笔记:

  • 如果答案取决于我正在使用的处理器,那就让它成为 x86_64,如果你能详细说明其他处理器,那会很好。
  • 请确保并参考 的负值行为x。我不介意这种行为或那种行为,但我需要知道这种行为是什么。

c floating-point c99 floor libm

3
推荐指数
1
解决办法
101
查看次数

在Haskell中使用系列的自然对数给出了不精确的结果

所以我编写了两个函数来计算变量x的自然对数,在将增量和的上限增加到33000后,函数仍然返回在ghci中测试的不精确结果,与从Prelude导入的默认日志函数相比,这里是代码定义:

lnOfx :: Float -> Float
lnOfx x = netSum f 1 33000
    where f i = 2*(1/oddTerm)*((x-1)/(x+1))**oddTerm
            where oddTerm = 2*i-1
          netSum f minB maxB = sum [f i | i <- [minB .. maxB]]

lnOfx2 :: Float -> Float
lnOfx2 x = netSum f 1 33000
       where f i = (1/i)*((x-1)/x)**i
             netSum f minB maxB = sum [f i | i <- [minB .. maxB]]
Run Code Online (Sandbox Code Playgroud)

测试结果如下:

log 3
1.0986122886681098
lnOfx 3
1.0986125
lnOfx2 3
1.0986122

log 2
0.6931471805599453 …
Run Code Online (Sandbox Code Playgroud)

math haskell libm

1
推荐指数
1
解决办法
125
查看次数

Objective C功能混合精度结果

关于目标c中的pow函数的一般问题.

为什么当base = 125时,以下代码吐出ans = 4.9999999

NSDecimalNumber * base = [[NSDecimalNumber alloc ]initWithString:@"125"];
NSDecimalNumber * root = [[NSDecimalNumber alloc] initWithString:@"3"];
double ans=pow(125, 1.0/[root doubleValue]);
Run Code Online (Sandbox Code Playgroud)

当base = 27时正好为3

NSDecimalNumber * base = [[NSDecimalNumber alloc ]initWithString:@"27"];
NSDecimalNumber * root = [[NSDecimalNumber alloc] initWithString:@"3"];
double ans=pow(125, 1.0/[root doubleValue]);
Run Code Online (Sandbox Code Playgroud)

floating-point precision objective-c pow libm

0
推荐指数
1
解决办法
218
查看次数

标签 统计

libm ×7

c ×3

gcc ×3

floating-point ×2

64-bit ×1

c++ ×1

c99 ×1

floor ×1

haskell ×1

jq ×1

ld ×1

libraries ×1

math ×1

modulo ×1

objective-c ×1

pow ×1

precision ×1

rounding ×1

ubuntu ×1