我尝试调用我自己的tan
函数实现,但是我的gcc只调用math.h中定义的那个(即libm.a' s)。假设我有main.c调用tan
#include <stdio.h>
#include <math.h>
double tan(double);
main(){
printf ("Hello, %g\n ", tan(1.0));
}
以及实施foo.c
tan
double tan(double x){
return 1000.9999;
}
然后我将两者联系起来,期望输出为1000.9999
gcc main.c foo.c; ./a.out
但我明白了:
Hello, 1.55741
其中1.55741应该是tanh(1)由math.h计算,而不是foo.c
中定义的那个。我如何以这样一种方式链接main.c和foo.c,以便&#39; tan&#39;在foo.c中被调用? (在这里,我不打算改变其他名称。)
[编辑]关于我的编译器:我使用的是gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)
答案 0 :(得分:4)
将-fno-builtin
传递给编译器调用。默认情况下,gcc使用一种优化,其中标准库函数被特殊指令替换,期望他们做他们应该做的事情。
要关闭该优化,请通过-fno-builtin
将所有功能关闭,或-fno-builtin-function
仅关闭function
,例如-fno-builtin-tan
关闭tan
功能的优化。
根据您的平台,您可能还需要不包含<math.h>
。该标头可能包含名为tan
的宏或内联定义,这可能会导致您观察到的问题。