[LINUX] Ignorer soname lors de la liaison (impossible)

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).

Recommended Posts

Ignorer soname lors de la liaison (impossible)
Erreur du système d'exploitation: impossible de trouver ou de charger spatialindex_c-64.dll lors de l'importation de géopandas