Есть ли способ использовать мой собственный sin
а также cos
функции вместо ::std::sin
а также ::std::cos
в glm::rotate(...)
звонки?
Единственный способ, которым я могу придумать, это использовать макросы для замены sin
а также cos
символы внутри std
пространство имен, но я действительно не хотел бы этого делать.
Использование LD preload будет работать.
Я объясню на небольшом примере.
Предположим, что это наш основной код …
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».
Других решений пока нет …