1
有什么方法可以使用我自己的sin
和cos
函数代替::std::sin
和::std::cos
在glm::rotate(...)
中调用?在glm中使用“custom”sin和cos :: rotate
我能想到的唯一的办法,是使用宏来代替std
命名空间内sin
和cos
符号,但我真的不希望这样做。
有什么方法可以使用我自己的sin
和cos
函数代替::std::sin
和::std::cos
在glm::rotate(...)
中调用?在glm中使用“custom”sin和cos :: rotate
我能想到的唯一的办法,是使用宏来代替std
命名空间内sin
和cos
符号,但我真的不希望这样做。
使用LD预加载将起作用。
我会用一个小例子来解释。
假设,这是我们主要的代码...
int main()
{
std::cout<< std::sin(1000);
return 0;
}
,如果我编译并运行它,它应该打印0.82688
现在我定义自己的罪
mysin.hpp
extern "C"
{
double sin(double);
}
mysin.cpp
#include "mysin.hpp"
double sin(double in)
{
return in + 10;//do you computation here
}
现在编译它作为一个共享库
g++ -O2 -c -fPIC mysin.cpp -o mysin.o
g++ -shared -Wl,-soname,libmysin.so mysin.o -o libmysin.so
假设原始程序被编译为 “a.out的”。运行它与我们的库预装
LD_PRELOAD=./libmysin.so ./a.out
现在结果将是“1010”。
为什么? “sin”或“cos”的定义最近有变化吗?你真的认为你能比标准库做得更好吗?基于什么理由? – EJP
@EJP:我发现这些评论令人讨厌 - 我并不是想要攻击你,但每次我提出一个非常“低级”的优化问题时,总是有人不理会这个问题,只是说“不这样做”。我正在试验sprite批处理和性能关键循环,我想测量(sintable + cos表),(sin/cos表)和(std sin cos)之间的性能差异。不,罪和cos的定义最近没变。不,我认为我不能“比标准图书馆做得更好”。我只是想实验和衡量 –
也许你真的对我的动机很好奇,但是你的评论给我的印象是“看起来,另一个愚蠢地认为自己能比标准图书馆做得更好的家伙!”* –