Inhaltsverzeichnis
Frageninhalt
Heim Java Kompilierte C++-Bibliotheksfunktion nicht gefunden

Kompilierte C++-Bibliotheksfunktion nicht gefunden

Feb 08, 2024 pm 11:57 PM
编译错误 lsp

Beim Schreiben von C++-Programmen kann es beim PHP-Editor Youzi manchmal zu dem Problem kommen, dass „kompilierte C++-Bibliotheksfunktionen nicht gefunden werden können“. Dieser Fehler tritt normalerweise während der Verknüpfungsphase auf und bedeutet, dass der Compiler die erforderliche Bibliotheksfunktion nicht finden kann. Für dieses Problem kann es viele Gründe geben, z. B. eine falsche Konfiguration des Bibliotheksdateipfads, eine unsachgemäße Installation der Bibliotheksdatei usw. Um dieses Problem zu lösen, können wir es beheben, indem wir den Pfad der Bibliotheksdatei überprüfen, die Bibliotheksdatei neu installieren und den Compiler aktualisieren. In diesem Artikel erfahren Sie im Detail, wie Sie diesen häufigen Kompilierungsfehler beheben können.

Frageninhalt

Ich habe eine Datei namens libmylibrary.a und eine Header-Datei namens mylibrary.h die eine Funktion namens myfunction() enthält. Ich habe sie mit der CPP-Datei (helloworldjni.cpp) kombiniert und eine neue Bibliothek namens native.dll erstellt. Wenn ich jedoch versuche, native.dll in Java mit jni zu kompilieren, kann ich die Funktionen in libmylibrary.a und mylibrary.h nicht finden.

mylibrary.h

// mylibrary.h
#ifndef mylibrary_h
#define mylibrary_h

#ifdef __cplusplus
extern "c" {
#endif

void myfunction();  // declare the function prototype

#ifdef __cplusplus
}
#endif

#endif // mylibrary_h
Nach dem Login kopieren

Das sind die Schritte, die ich befolgt habe

1. Erstellen Sie eine Java-Datei (helloworldjni.java) zur Integration von jni

public class helloworldjni {
    static {
        system.load("/home/centos/test5/native.dll");
    }
    public static void main(string[] args) {
        new helloworldjni().sayhello();
    }
  //native method with no body
  public native void sayhello();
}
Nach dem Login kopieren

2. Verwenden Sie diesen Befehl, um die Datei helloworldjni.h zu erstellen

javac -h .  helloworldjni.java
Nach dem Login kopieren

3. Integrieren Sie die Dateien mylibrary.h und helloworldjni.h in meine CPP-Datei (helloworldjni.cpp)

#include<iostream>
#include<jni.h>
#include "mylibrary.h"
#include "helloworldjni.h"
void sayhello(){
  myfunction();
}
int main() {
    sayhello();  // call the function from the library

    return 0;
}
jniexport void jnicall java_helloworldjni_sayhello
  (jnienv* env, jobject thisobject) {
    sayhello();
}
Nach dem Login kopieren

4. Kompilieren Sie diese Dateien (erstellen Sie .o-Dateien)

g++ helloworldjni.cpp -l. -lmylibrary -i"/home/centos/jdk-21.0.1/include" -i"/home/centos/jdk-21.0.1/include/linux" -o helloworldjni.o
Nach dem Login kopieren

5. .o-Datei in .dll-Datei generieren

g++ -shared -o native.dll helloworldjni.o
Nach dem Login kopieren

6. Kompilieren Sie helloworldjni.java und führen Sie es aus

java helloworldjni
Nach dem Login kopieren

Diesen Fehler erhalten:

java: symbol lookup error: /home/centos/test5/native.dll: undefined symbol: myFunction
Nach dem Login kopieren

Wie integriere ich

libmylibrary.a in meine Java-Code-Kompilierung, um sicherzustellen, dass die Funktionen in libmylibrary.a erkannt werden?

ps: Ich bin mir sicher, dass an libmylibrary.a nichts auszusetzen ist, da ich myfunction() mit reinem C++ aufrufen kann, aber bei der Verwendung von jni scheint es ein Verknüpfungsproblem zu geben, das ich nicht herausfinden kann

Workaround

Ich habe alle Ihre Schritte ausprobiert und einige geringfügige Änderungen vorgenommen, und das hat bei mir funktioniert. Zusätzliches Build-Skript:

#!/bin/sh

JAVA_SDK_HOME=/home/user/lib/jdk-21.0.1

#echo BUILD THE LIB
#g++ -c mylibrary.cpp -o mylibrary.o
#ar rcs libmylibrary.a mylibrary.o

echo MAKE JAVA STUB
$JAVA_SDK_HOME/bin/javac -h . HelloWorldJNI.java

echo BUILD SO file
g++ -c -fPIC -o HelloWorldJNI.o HelloWorldJNI.cpp \
  -I $JAVA_SDK_HOME/include/ \
  -I $JAVA_SDK_HOME/include/linux

g++ -shared -o native.dll HelloWorldJNI.o -L. -lmylibrary

echo TESTING
$JAVA_SDK_HOME/bin/java HelloWorldJNI


Nach dem Login kopieren
Aber es gibt einige Einschränkungen:

    Unter Windows müssen Sie höchstwahrscheinlich einige Makros einrichten, also
  1. jniexport 实际上是 __declspec(dllexport),而不是 __declspec(dllimport)
  2. Zum Verlinken unter Linux
  3. C++-Dateien kompilieren*.so 文件,您需要使用 -fpic

Das obige ist der detaillierte Inhalt vonKompilierte C++-Bibliotheksfunktion nicht gefunden. 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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate 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 passt man die Schriftgröße auf dem Redmi Note13RPro an? Wie passt man die Schriftgröße auf dem Redmi Note13RPro an? May 07, 2024 pm 06:34 PM

Ändern Sie nicht die Bedeutung des ursprünglichen Inhalts, optimieren Sie den Inhalt, schreiben Sie ihn nicht weiter. Redmi Note13RPro bietet nicht nur eine hervorragende Leistung, sondern auch ein noch besseres Benutzererlebnis Das Redmi Note13RPro ist mit einer komfortablen Benutzererfahrung ausgestattet und verfügt über eine Schriftartenanpassungsfunktion, mit der Benutzer Schriftarten für Ihr Telefon anpassen können. Wenn Sie wissen möchten, wie Sie die Schriftgröße des Redmi Note13R Pro anpassen können, dann werfen Sie einen Blick darauf. Wie passt man die Schriftgröße auf dem Redmi Note13RPro an? 1. Öffnen Sie die Einstellungen-App. 2. Scrollen Sie nach unten und wählen Sie „Anzeige“. 3. Klicken Sie auf „Textgröße“. 4. Auf diesem Bildschirm können Sie die Schriftgröße anpassen, indem Sie den Schieberegler ziehen oder eine voreingestellte Schriftgröße auswählen. 5. Nachdem die Anpassung abgeschlossen ist, drücken Sie zum Speichern auf „OK“.

Wie verbinde ich das Redmi Note13RPro mit dem Computer? Wie verbinde ich das Redmi Note13RPro mit dem Computer? May 09, 2024 pm 06:52 PM

Das Mobiltelefon Redmi Note13RPro erfreut sich in letzter Zeit großer Beliebtheit. Viele Benutzer verwenden dieses Mobiltelefon jedoch zum ersten Mal und wissen daher nicht, wie sie das Redmi Note13RPro an den Computer anschließen sollen In diesem Zusammenhang ist der Herausgeber hier, um Ihnen eine ausführliche Tutorial-Einführung zu erklären. Wie verbinde ich das Redmi Note13RPro mit dem Computer? 1. Verbinden Sie das Redmi-Telefon über ein USB-Datenkabel mit der USB-Schnittstelle des Computers. 2. Öffnen Sie die Telefoneinstellungen, klicken Sie auf Optionen und aktivieren Sie das USB-Debugging. 3. Öffnen Sie den Geräte-Manager auf Ihrem Computer und suchen Sie die Option für mobile Geräte. 4. Klicken Sie mit der rechten Maustaste auf das Mobilgerät, wählen Sie „Treiber aktualisieren“ und dann „Automatisch nach aktualisierten Treibern suchen“. 5. Wenn der Computer nicht automatisch nach dem Treiber sucht,

Wie extrahiere ich Text aus Bildern auf dem Redmi Note13RPro? Wie extrahiere ich Text aus Bildern auf dem Redmi Note13RPro? May 08, 2024 pm 10:00 PM

Das Mobiltelefon Redmi Note13RPro integriert eine Reihe intelligenter Tools in Bezug auf Softwarefunktionen. Eines davon ist das schnelle und genaue Extrahieren von Textinhalten aus Bildern. Der folgende Editor stellt Ihnen vor, wie Redmi Note13RPro Text aus Bildern extrahiert. Wie extrahiere ich Text aus Bildern auf dem Redmi Note13RPro? Verwenden Sie die QR-Code-Scanfunktion von Xiaomi, öffnen Sie die QR-Code-Scananwendung auf Ihrem Telefon, klicken Sie auf das Bildsymbol, wählen Sie ein Bild aus und klicken Sie dann rechts auf die Option „Text erkennen“, um den Text im Bild erfolgreich zu extrahieren. Bedienung über das Handyalbum. Suchen Sie im Handyalbum nach dem Bild, dessen Text extrahiert werden soll, klicken Sie unter dem Bild auf „Mehr“ und wählen Sie „Text extrahieren“. Nach erfolgreicher Erkennung können Sie den Text nach Bedarf kopieren oder speichern. Verwenden Sie WeChat-Miniprogramme. Mikro öffnen

Ein vollständiger Leitfaden für alle Ebenen von „Whole Life' Ein vollständiger Leitfaden für alle Ebenen von „Whole Life' May 07, 2024 pm 06:31 PM

Entire Huoba ist ein sehr unterhaltsames Gelegenheits-Puzzlespiel, das jeder auf mehreren Plattformen erleben kann! Das Spiel bietet unzählige spannende Level, die darauf warten, freigeschaltet zu werden. Jedes Level ist voller Neuheiten und Herausforderungen und ermöglicht es Ihnen, ein interessantes Abenteuer zu erleben, bei dem Sie Fragen beantworten und neue Spielinhalte freischalten. Wie kann man also das gesamte Level von Huoba abschließen? Heute bringe ich Ihnen einen vollständigen Leitfaden für alle Level von „Whole Life“. Wenn Sie beim Bestehen des Levels auf Probleme stoßen, können Sie darauf zurückgreifen! „Das ganze Leben“: Vollständiger Leitfaden für alle Ebenen von „Das ganze Leben“. Der vollständige Leitfaden für alle Ebenen von „Das ganze Leben“. Helfen Sie ihr, sich den Silvesterabend anzuschauen, helfen Sie der kleinen Schwester, den Dreckswolf zu identifizieren, und der Großmutter Um dem kleinen Mädchen zu helfen, aus der Gefahr zu kommen, gibt das Outdoor-Abenteuer vor, Ah Piao nicht zu sehen, und verwandelt sich wieder in einen Humanoiden. Jemand auf dem Rücksitz blieb ruhig und kümmerte sich um den weiblichen Geist ruhig und ging mit dem weiblichen Geist um.

„Whole Life' Journey to the West Beauty hilft den weiblichen Charakteren von Journey to the West, an ihren Platz zurückzukehren und klärt die Strategie „Whole Life' Journey to the West Beauty hilft den weiblichen Charakteren von Journey to the West, an ihren Platz zurückzukehren und klärt die Strategie May 07, 2024 pm 03:46 PM

Entire Huoba ist ein sehr beliebtes, unterhaltsames Level-Break-Spiel auf Douyin. Es gibt viele Level im Spiel, die darauf warten, von jedem herausgefordert zu werden! Im Spiellevel „Journey to the West Beauty“ muss jeder der weiblichen Figur von „Journey to the West“ helfen, zu ihrer Position zurückzukehren. Das Folgende ist die Anleitung zum Abschließen des Spiels „Whole Life“, die Ihnen der Herausgeber zur Verfügung gestellt hat. Die Schönheiten in Journey to the West helfen den weiblichen Charakteren in Journey to the West, an ihre Orte zurückzukehren Das Spiel kann einen Blick darauf werfen. Ich hoffe, es kann Ihnen helfen. „Whole Life“ Die Schönheit von „Journey to the West“ hilft der weiblichen Figur von „Journey to the West“, an ihren Platz zurückzukehren 1. Klicken Sie auf die Schriftrolle, um die weibliche Figur anzuzeigen. 2. Der Geist mit den weißen Knochen und der Pfauengeist müssen klicken, um die Aktionen zu wechseln. Die Antwort ist wie in der Abbildung unten dargestellt: „Das ganze Leben“. „Live“ verfügt über einen umfassenden Leitfaden für alle Level, der ihr hilft, ihr Geheimnis zu bewahren, den Drecksack und den Wolf zu identifizieren, und ihre Großmutter, die dem kleinen Mädchen dabei hilft, der Gefahr für Outdoor-Abenteuer zu entkommen.

„Whole Life'-Leitfaden zur Rettung von Nachbarn und zur Aufforderung an alle Nachbarn, nach unten zu gehen „Whole Life'-Leitfaden zur Rettung von Nachbarn und zur Aufforderung an alle Nachbarn, nach unten zu gehen May 07, 2024 pm 07:00 PM

Entire Huoba ist ein sehr beliebtes, unterhaltsames Level-Break-Spiel auf Douyin. Es gibt viele Level im Spiel, die darauf warten, von jedem herausgefordert zu werden! Im Spiel musst du im Level „Rette die Nachbarn“ alle Nachbarn davon überzeugen, nach unten zu gehen. Im Folgenden finden Sie die Anleitung zum Retten der Nachbarn und zum Auffordern aller Nachbarn, nach unten zu gehen, um das Level zu bestehen. Freunde, die nicht wissen, wie man das Level besteht, schauen wir uns das hoffentlich gemeinsam an dir helfen. „Ganzes Leben“ Die Nachbarn retten und allen Nachbarn raten, nach unten zu gehen Räumungsstrategie Die Nachbarn retten und alle Nachbarn ermutigen, nach unten zu gehen 1. Jemand unten braucht Erste Hilfe 2. Der Buchladen unten verkauft vergriffene Lernmaterialien 3. Im Mülleimer unten liegen viele Pappkartons. 4. Ich stimme dem Datum zu, du gehst zuerst nach unten. 5. Dein Bruder ist in unsere Gemeinde gekommen, um Werbung zu machen. 6. Jemand hat einen neuen Angelplatz entdeckt. 7. Ziehe die Dosenkatze nach unten. 8. Ziehe die Gabel zu

„Whole Life'-Leitfaden für Mutter und Tochter, um sich in der rebellischen Zeit zu verstehen und zu versöhnen „Whole Life'-Leitfaden für Mutter und Tochter, um sich in der rebellischen Zeit zu verstehen und zu versöhnen May 08, 2024 pm 01:31 PM

Entire Huoba ist ein sehr beliebtes, unterhaltsames Level-Break-Spiel auf Douyin. Es gibt viele Level im Spiel, die darauf warten, von jedem herausgefordert zu werden! Die rebellische Phase des Spiels erfordert, dass Mutter und Tochter einander verstehen und versöhnen. Das Folgende ist ein Leitfaden für Mutter und Tochter, um sich während der rebellischen Zeit von „Whole Life“ zu versöhnen. Freunde, die nicht wissen, wie sie den Test bestehen sollen, schauen wir uns das gemeinsam an . Ich hoffe, es kann Ihnen helfen. „Whole Life“ ermöglicht es Mutter und Tochter, sich während der rebellischen Zeit zu verstehen und Frieden zu schließen. Lassen Sie Mutter und Tochter sich während der rebellischen Zeit verstehen und versöhnen 3. Wischen Sie die Zeit auf der rechten Seite nach unten. 4. Klicken Sie auf die Büchertasche „Whole Life“ mit einer vollständigen Anleitung zu allen Ebenen, um ihr zu helfen, den Überblick über das Jahr zu behalten Die junge Dame identifiziert den Drecksack und die Wolfsoma hilft dem kleinen Mädchen, der Gefahr zu entkommen und die Natur zu erkunden.

VESA kündigt die DisplayHDR 1.2-Spezifikation an, die die Leistungsanforderungen verbessert: Erhöhung der Farbgenauigkeit, breiter Farbraum usw. VESA kündigt die DisplayHDR 1.2-Spezifikation an, die die Leistungsanforderungen verbessert: Erhöhung der Farbgenauigkeit, breiter Farbraum usw. May 08, 2024 pm 02:13 PM

Laut Nachrichten dieser Website vom 8. Mai hat die Video Electronics Standards Association (VESA) heute eine Pressemitteilung zur Ankündigung der DisplayHDR1.2-Spezifikation herausgegeben und erklärt, dass es derzeit mehr als 3.000 Display-Modelle auf der Welt gibt, die den DisplayHDR-Standard erfüllen Zertifizierung. Die Spezifikation der DisplayHDR1.2-Version bringt strengere Leistungsanforderungen mit sich. Zusätzlich zu Helligkeit, Farbraum und Bittiefe werden auch Farbgenauigkeit, Kontrast und Schwarzwert (Schwarzwert) eingeführt, der sich auf den Wert eines Anzeigegeräts bezieht, das einer bestimmten Kalibrierung unterzogen wurde , es gibt keine einzige Zeile. Mehrere neue Testanforderungen für Videosignalpegel (Lichtausgabe) und Untertitelflimmern. DisplayHDRv1.2 verbessert den Weißhelligkeitstest und ändert den 10 %-Center-Patch-Test auf schwarzem Hintergrund in einen nicht schwarzen Hintergrund