Wie können Variablen in Shared Libraries mit Aliasing versehen werden?

8

Ich möchte zwei Alias-Variablen in eine Bibliothek einfügen, damit der Anwendungscode beide Namen verwenden kann. Aber ich finde, dass es in einer statischen Bibliothek, aber nicht in einer gemeinsam genutzten Bibliothek getan werden kann. Hier ist mein Experiment. Ich habe es auf einem X86 Linux-Rechner mit gcc-Compiler gemacht.

test.c - der Anwendungscode

%Vor%

mein.c - der Bibliothekscode

%Vor%

Erstellen und starten Sie mit einer statischen Bibliothek. Wir können sehen, myglob und myglob_ sind in der Tat Alias.

%Vor%

Erstellen und starten Sie mit einer gemeinsam genutzten Bibliothek. Wir können sehen, dass myglob und myglob_ auf verschiedene Adressen zeigen und grundsätzlich zwei verschiedene Variablen sind.

%Vor%

Warum funktionieren Alias-Symbole in der Shared Library nicht? Wie man es repariert? Danke.

============= Follow-up ================

Ich habe versucht, eine positionsunabhängige ausführbare Datei mit "gcc -o test test.c -L. -lmy -fPIC" zu erstellen. Mit diesem, Myglob und Myglob_ sind in der Tat mit der gemeinsamen Bibliothek Alias. Dieser Ansatz funktioniert jedoch nicht in dem Hintergrundproblem, das die Frage hervorgebracht hat. Ich liste das Problem und den Grund auf, warum ich es brauche. (Beachten Sie, dass ich in meinem Projekt F77-Standardblöcke verwenden muss)

Eine Fortran-Header-Datei

%Vor%

Init-Routine in Fortran

%Vor%

Init-Routine in C

%Vor%

Fortran-Bibliothekswrapper in C

%Vor%

Anwendung in Fortran

%Vor%

Erstellen Sie eine gemeinsame Bibliothek libmy.so und verwenden Sie sie

%Vor%

Nehmen wir an, wir möchten, dass die Bibliothek portierbar ist, und die Anwendung wird von einem anderen Fortran-Compiler mit einer anderen Namen-Mangling-Konvention kompiliert (ich verwende gfortran - fno- unterstrich, um das nachzuahmen)

%Vor%

Irgendwelche Vorschläge? Danke.

    
Junchao Zhang 11.10.2014, 14:22
quelle

1 Antwort

2

Dies geschieht aufgrund von Kopierverlagerungen. Lesen Sie über sie hier .

> %Vor%     
Employed Russian 11.10.2014 23:36
quelle

Tags und Links