func.c
int op(int x,int y){return x+y;}
gateway.c
int op(int x,int y);
int gateway(){return op(123,456);}
main.c
#include <stdio.h>
int gateway();
int main(){
printf("%d\n",gateway());
}
main.sh
mkdir -p mul
cat func.c | gcc -O2 -s -shared -Wl,-soname,func.so -o func.so -xc -
cat func.c | sed 's/+/*/' | gcc -O2 -s -shared -Wl,-soname,func.so -o mul/func.so -xc -
#patchelf --set-soname '' mul/func.so
gcc -O2 -s -shared -o gateway.so gateway.c $PWD/mul/func.so
#patchelf --replace-needed func.so $PWD/mul/func.so gateway.so
gcc -O2 -s main.c gateway.so
./a.out
Dans cette situation, je veux que a.out produise 56088 (au lieu de 579). ** Cependant, les options de compilation de func.so ne peuvent pas être modifiées. ** **
Après quelques essais et erreurs, j'ai dû utiliser patchelf (commentez l'un des deux patchelfs).