Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Lösung für Konflikte zwischen gleichnamigen Symbolen unter Linux

Lösung für Konflikte zwischen gleichnamigen Symbolen unter Linux

Jun 18, 2017 pm 01:36 PM
linux 冲突 geschehen Gleicher Name 符号

In diesem Artikel werden hauptsächlich relevante Informationen zur Lösung des Problems widersprüchlicher Symbole mit demselben Namen unter Linux vorgestellt. Freunde, die sie benötigen, können sich auf

Lösung für das Problem widersprüchlicher Symbole mit dem beziehen Gleicher Name unter Linux

Ich bin kürzlich bei der Arbeit auf das folgende lästige Problem gestoßen:

Unter Linux gibt es drei Module aa, bb und cc. Die Grundsituation ist wie folgt:

cc ​​​​Kompilieren und verbinden, um eine dynamische Bibliothek zu erhalten. Es gibt die folgenden Schnittstellen in cc:


cc_fun 
{ 
…… 
do();//调用名为do的cc模块内部函数 
…… 
}
Nach dem Login kopieren

bb kompilieren und verbinden, um bb.a statische-Bibliothek zu erhalten. Es gibt die folgenden Schnittstellen in bb:


bb_fun 
{ 
…… 
handle = dlopen(cc.so, RTLD_LAZY);//加载cc.so 
pccfun = dlsym(handle, “cc_fun”);//获取cc_fun函数指针 
(*pccfun)();//调用cc_fun函数,此时应该会调用cc模块中的do()函数 
do();//调用名为do的bb模块内部函数(与cc模块中的do()函数同名,实现却不相同) 
…… 
}
Nach dem Login kopieren

aa Nach der Kompilierung eine Verbindung herstellen bb.a über die Link-Option -lbb, um das ausführbare aa-Programm abzurufen und die bb.a-Schnittstellenfunktion bb_fun() aufzurufen:


main 
{ 
…… 
bb_fun();//调用bb_fun函数 
…… 
}
Nach dem Login kopieren

Während der Arbeit Es wurde festgestellt, dass sich aa während der Laufzeit ungewöhnlich verhält. Es wurde festgestellt, dass sich das Problem auf die gleichnamige Funktion do() konzentriert. Beim Drucken der Ausgabe wurde festgestellt, dass die beiden Aufrufe der Funktion do() im Programm beide die Funktion do() im Modul bb aufriefen, während die Funktion do() im Modul cc nie aufgerufen wurde, was zu einem abnormalen Programm führte Verhalten und Speicherlecks. Nach mehreren Überprüfungen habe ich erfahren, dass die Symboltabellen in jeder Bibliothek im Linux-Programm schließlich in die globale Symboltabelle geladen werden, in der sich das Programm zu diesem Zeitpunkt befindet, wenn es ein Symbol mit dem gibt Bei gleichem Namen kann nur das zuerst geladene Symbol aufgerufen werden, d. h. später geladene Symbole mit demselben Namen werden durch die vorherigen überschrieben. Die Funktion do() im cc-Modul wird durch die Funktion do() im bb-Modul überschrieben und kann daher nicht aufgerufen werden.

Kein Unsinn mehr. . .

Nachdem Sie viele unbefriedigende Methoden ausprobiert haben, lautet die endgültige Lösung wie folgt:

1. Fügen Sie -Wl, -Bsymbolic -Wl zum cc-Makefile hinzu -script, die Verbindungsoption der Version, bedeutet, das Skript in der Versionsdatei zu verwenden, um anzugeben, welche Funktionen exportiert werden.

2.version-Datei wird wie folgt implementiert:


bedeutet, dass das cc-Modul so angegeben ist, dass es nur die Schnittstellenfunktion cc_fun exportiert, und die Andere Funktionen sind auf „Lokal“ eingestellt.
VERS{ 
global: 
cc_fun; 
local: *; 
};
Nach dem Login kopieren

Speichern Sie die Datei in dem Verzeichnis, in dem sich das Makefile befindet.

3. Kompilieren und verbinden Sie die drei Module und das Problem ist gelöst.

Das obige ist der detaillierte Inhalt vonLösung für Konflikte zwischen gleichnamigen Symbolen unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Warum tritt bei der Installation einer Erweiterung mit PECL in einer Docker -Umgebung ein Fehler auf? Wie löst ich es? Warum tritt bei der Installation einer Erweiterung mit PECL in einer Docker -Umgebung ein Fehler auf? Wie löst ich es? Apr 01, 2025 pm 03:06 PM

Ursachen und Lösungen für Fehler Bei der Verwendung von PECL zur Installation von Erweiterungen in der Docker -Umgebung, wenn die Docker -Umgebung verwendet wird, begegnen wir häufig auf einige Kopfschmerzen ...

Wie kann man Node.js oder Python -Dienste in Lampenarchitektur effizient integrieren? Wie kann man Node.js oder Python -Dienste in Lampenarchitektur effizient integrieren? Apr 01, 2025 pm 02:48 PM

Viele Website -Entwickler stehen vor dem Problem der Integration von Node.js oder Python Services unter der Lampenarchitektur: Die vorhandene Lampe (Linux Apache MySQL PHP) Architekturwebsite benötigt ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

Wie konfigurieren Sie die Timing -Timing -Aufgabe von ApScheduler als Dienst auf macOS? Wie konfigurieren Sie die Timing -Timing -Aufgabe von ApScheduler als Dienst auf macOS? Apr 01, 2025 pm 06:09 PM

Konfigurieren Sie die Timing -Timing -Timing -Timing -Timing auf der MacOS -Plattform, wenn Sie die Timing -Timing -Timing -Timing von APScheduler als Service konfigurieren möchten, ähnlich wie bei NGIN ...

Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Apr 03, 2025 pm 03:00 PM

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Kann der Python -Dolmetscher im Linux -System gelöscht werden? Kann der Python -Dolmetscher im Linux -System gelöscht werden? Apr 02, 2025 am 07:00 AM

In Bezug auf das Problem der Entfernung des Python -Dolmetschers, das mit Linux -Systemen ausgestattet ist, werden viele Linux -Verteilungen den Python -Dolmetscher bei der Installation vorinstallieren, und verwendet den Paketmanager nicht ...

So öffnen Sie Web.xml So öffnen Sie Web.xml Apr 03, 2025 am 06:51 AM

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

See all articles