Использование предварительной загрузки 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
}
Теперь скомпилировать его в качестве общей Lib
g++ -O2 -c -fPIC mysin.cpp -o mysin.o
g++ -shared -Wl,-soname,libmysin.so mysin.o -o libmysin.so
Если предположить, что оригинальная программа компилируется как "a.out". Запустите его с нашей предварительной загрузкой lib
LD_PRELOAD=./libmysin.so ./a.out
Теперь результатом будет «1010».
Почему? Недавно изменилось определение 'sin' или' cos'? Вы действительно думаете, что можете сделать лучше, чем стандартная библиотека? На каких основаниях? – EJP
@EJP: Я нахожу эти комментарии раздражающими - я не хочу нападать на вас, но каждый раз, когда я задаю очень «низкий уровень» вопрос оптимизации, кто-то всегда игнорирует этот вопрос и просто говорит «не делайте этого». Я экспериментирую с рассылкой спрайтов и критичными по производительности циклами, и я хотел бы измерить разницу в производительности между использованием (таблица с синтезированным + cos), (таблица sin/cos) и (std sin cos). Нет, определения sin и cos не изменились недавно. Нет, я не думаю, что смогу «лучше, чем стандартная библиотека». Я просто хотел поэкспериментировать и измерить –
Возможно, вы искренне интересовались моими мотивами, но ваш комментарий дал мне впечатление * «Посмотрите, еще один чувак, который глупо думает, что он может сделать лучше, чем стандартная библиотека!» * –