我在 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) #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
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的更多信息?
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)
我需要做什么?
我有一个xtype变量float,我需要它的小数部分。我知道我可以得到它
x - floorf(x), 或者fmodf(x, 1.0f)我的问题:其中一个总是比另一个更可取吗?它们实际上是一样的吗?我可以考虑第三种选择吗?
笔记:
x。我不介意这种行为或那种行为,但我需要知道这种行为是什么。所以我编写了两个函数来计算变量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) 关于目标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)