


Lösung für Konflikte zwischen gleichnamigen Symbolen unter Linux
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模块内部函数 …… }
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()函数同名,实现却不相同) …… }
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函数 …… }
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:
VERS{ global: cc_fun; local: *; };
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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

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

Verwenden Sie Python im Linux -Terminal ...

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

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.

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

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