[LINUX] Soname beim Verknüpfen ignorieren (konnte nicht)

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

In dieser Situation möchte a.out 56088 (anstelle von 579) ausgeben. ** Die Kompilierungsoptionen von func.so können jedoch nicht geändert werden. ** ** **

Nach einigem Ausprobieren musste ich Patchelf verwenden (eines der beiden Patchelfs auskommentieren).

Recommended Posts

Soname beim Verknüpfen ignorieren (konnte nicht)
Betriebssystemfehler: Spatialindex_c-64.dll konnte beim Importieren von Geopandas nicht gefunden oder geladen werden