C 我是否可以将内联函数编译为共享库,并使用LD_PRELOAD作为内联函数钩住其他可执行文件?

C 我是否可以将内联函数编译为共享库,并使用LD_PRELOAD作为内联函数钩住其他可执行文件?,c,linker,shared-libraries,hook,ld-preload,C,Linker,Shared Libraries,Hook,Ld Preload,我想将我的共享库挂接到其他程序二进制文件,挂接函数如下: void my_function(void *data){ bool res = my_function_needed(data); if (res){ // Do my work } else { original_function(data); } } 钩子函数将使用我的过程和函数参数后面的原始过程。问题是,这个函数会被频繁调用,性能在这里很重要因为我无法在运行

我想将我的共享库挂接到其他程序二进制文件,挂接函数如下:

void my_function(void *data){
    bool res = my_function_needed(data);
    if (res){
        // Do my work
    }
    else {
        original_function(data);
    }
}
钩子函数将使用我的过程和函数参数后面的原始过程。问题是,这个函数会被频繁调用,性能在这里很重要因为我无法在运行时更改函数调用地址本身(因为这是函数,而不是函数指针),所以必须保留else以决定正确的过程


因此,我想至少将这些函数(my_function()和my_function_needed())作为内联函数,以减少函数调用开销。是否可以在动态库挂钩中使代码真正内联?

内联函数的方法是向编译器提供函数源,并允许它将其内联到调用函数的内容中。在我熟悉的所有C和C++编译器中,这必须在编译的代码生成阶段之前发生,通常是在解析之后的某个时候。动态链接库或静态链接库都是生成的可使用的代码体;但是,此代码不会内联到正在编译的其他代码中。它在静态库的链接时编译后或OS加载程序加载到内存时链接


如果你想一个函数被内联,你通常可以在C或C++头文件中提供它。

< p>获取内联函数的方法是向编译器提供函数源,并允许它将它内联到调用函数的内容中。在我熟悉的所有C和C++编译器中,这必须在编译的代码生成阶段之前发生,通常是在解析之后的某个时候。动态链接库或静态链接库都是生成的可使用的代码体;但是,此代码不会内联到正在编译的其他代码中。它在静态库的链接时编译后或OS加载程序加载到内存时链接

如果你想一个函数被内联,你通常可以用C或C++头文件提供它。