Seite 1 von 1

Unterstützung bei Framework/Library Installation

Verfasst: Di Jul 26, 2022 10:52 am
von Pf@nne
Moin,

ich versuche seit geraumer Zeit diese Library unter Windows 10/11 zum laufen zu bringen.

https://github.com/Pfannex/libiec61850.git

Für die Programmierung nutze ich VSCode.
Unter Ubuntu bin ich in der Lage alle entsprechenden Beispiele zu kompilieren und diese auch auszuführen.
Unter Windows scheitere ich am Make/CMake.
Hier fehlt scheinbar immer noch etwas.

Was habe ich bisher gemacht:
  1. clone des o.g. repos
  2. Installation: C/C++ Erweiterungen für VSCode (C/C++; Extension, Themes)
  3. Installation: https://www.msys2.org/ (mingw-w64)
  4. Build Infos: https://libiec61850.com/documentation/b ... e-library/
Unter Linux (Ubuntu) reicht jetzt ein einfaches Make im root der Library und alle Examles und die Library selber werden anstandslos compiliert.

Unter Windows habe ich es bisher mit einem make TARGET=WIN32 versucht.
Hier bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

C:\TEMP\Code\libiec61850>make TARGET=WIN32
process_begin: CreateProcess(NULL, uname, ...) failed.
make/target_system.mk:111: winpcap not found - will build without GOOSE support!
compiling acse.c
mkdir -p build_win32/src/mms/iso_acse/
Syntaxfehler.
make: *** [build_win32/src/mms/iso_acse/acse.o] Fehler 1
Mein Sachverstand reicht leider nicht aus um dieses Problem weiter einzugrenzen.
Daher die Frage, hat jemand Lust und Zeit mich hier ein wenig zu unterstützen?

Gruß
Marco

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Jul 26, 2022 12:02 pm
von Xin
Ich muss mal gucken, aber Linux-Libs auf Windows zu kompilieren ist häufig viel Frickelei. Spontan sehe ich hier auch keinen Grund, warum hier "Syntaxfehler" steht.

Allerdings erzeugt mkdir unter Windows ein Verzeichnis -p, was vermutlich nicht beabsichtigt ist. Das Skript, was da läuft ist also wohl auch nicht unbedingt für Windows gedacht... :-D

Wäre halt die Frage, was der nachfolgende Befehl wäre, der da ausgefürht wird und warum TARGET=WIN32 ihn scheinbar nicht interessiert.

Auf die Schnelle lese ich hier:

Code: Alles auswählen

To cross-compile for another platform you can specify the TARGET variable when executing make. To cross-compile for Windows you can call make TARGET=WIN32
Cross-Compile. Das ganze wird also offenbar auf Linux kompiliert.

Da müsstest Du dann entsprechend die Cross-Compiler unter Linux installieren, das dürfte mingw sein.

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Jul 26, 2022 12:08 pm
von Pf@nne
Moin Xin,

hast du denn Lust das bei dir mal zu probieren?
Vielliecht sollte man auch auf CMake wechseln, nur habe ich mit CMake noch weniger Plan....

Wir können das auch Step by Step parallel machen, hängt von deiner Lust/Zeit ab...

Über Unterstützung würde ich mich freuen!

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Jul 26, 2022 12:14 pm
von Xin
Ich kann mal mitgucken, aber genau jetzt habe keine Zeit. Ich vermute, vor Donnerstag wird das nix. :-|

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Jul 26, 2022 1:46 pm
von Pf@nne
Auf jeden Fall besser als hier mit meinem Halbwissen weiter im Nebel zu stochern.... :-)
Sollte sich vorher etwas ergeben, melde ich mich.

Vielleicht hat ja noch jemand eine zündende Idee....

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Aug 02, 2022 12:08 pm
von Pf@nne
Moin,

ich hab die Library jetzt soweit zum Laufen!

Zum kompilieren verwende ich jetzt CMake und den aktuellen Visual Studio Compiler, das läuft jetzt problemlos durch.
Ich kann die Library sowohl unter Visual Studio (Microsoft Visual Studio Community 2022 (64-Bit) - Version 17.2.6) als auch unter Visual Studio Code kompilieren.

Der nächste Schritt wäre jetzt die Einbindung der Library in eine GUI Umgebung.
Da ich schonmal was mit Qt gemacht habe wollte ich Qt als GUI nutzen.

Das Qt-Framework ist installiert und ein einfaches HelloWorld-Widget läuft auch.

Jetzt stecke ich wieder fest....
Wie binde ich die Library in mein HelloWorld-Widget ein?
Ich habe dafür gesorgt, dass der Header der Library und alle zugehörigen Bestandteile der Library gefunden werden.
Dieses Beispiel, mit auskommentierten Code, aber mit eingebundenem Header "iec61850_client.h" läuft durch.

Code: Alles auswählen

#include "QtWidgetsApplication1.h"
#include <QString>
#include <QMessageBox>
#include "iec61850_client.h"


QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
}

QtWidgetsApplication1::~QtWidgetsApplication1()
{
}

void QtWidgetsApplication1::on_pushButton_clicked()
{
    QString txt = "HelloWorld!";
    /*
    IedClientError error;

    IedConnection con = IedConnection_create();

    IedConnection_connect(con, &error, "localhost", 102);

    if (error == IED_ERROR_OK) {
        txt = "connected";
        IedConnection_close(con);
    }
    else {
        txt = "failed to connect";
    }

    IedConnection_destroy(con);
   */
    QMessageBox::about(this, "Title", txt);
}
Mit aktiven Funktionen z. B. "IedConnection con = IedConnection_create();" erhalte ich folgende Fehlermeldungen:

Code: Alles auswählen

Erstellen gestartet...
1>------ Erstellen gestartet: Projekt: QtWidgetsApplication1, Konfiguration: Debug x64 ------
1>QtWidgetsApplication1.cpp
1>QtWidgetsApplication1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "IedConnection_create" in Funktion ""private: void __cdecl QtWidgetsApplication1::on_pushButton_clicked(void)" (?on_pushButton_clicked@QtWidgetsApplication1@@AEAAXXZ)".
1>QtWidgetsApplication1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "IedConnection_destroy" in Funktion ""private: void __cdecl QtWidgetsApplication1::on_pushButton_clicked(void)" (?on_pushButton_clicked@QtWidgetsApplication1@@AEAAXXZ)".
1>QtWidgetsApplication1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "IedConnection_connect" in Funktion ""private: void __cdecl QtWidgetsApplication1::on_pushButton_clicked(void)" (?on_pushButton_clicked@QtWidgetsApplication1@@AEAAXXZ)".
1>QtWidgetsApplication1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "IedConnection_close" in Funktion ""private: void __cdecl QtWidgetsApplication1::on_pushButton_clicked(void)" (?on_pushButton_clicked@QtWidgetsApplication1@@AEAAXXZ)".
1>C:\TEMP\Code\QtWidgetsApplication1\x64\Debug\QtWidgetsApplication1.exe : fatal error LNK1120: 4 nicht aufgelöste Externe
1>Die Erstellung des Projekts "QtWidgetsApplication1.vcxproj" ist abgeschlossen -- FEHLER.
========== Erstellen: 0 erfolgreich, 1 Fehler, 0 aktuell, 0 übersprungen ==========
Hier bin ich wieder mit meinem Latein am Ende.....
Hat hier jemand Lust mir unter die Arme zu greifen?

Gruß
Pf@nne

EDIT:
Die Library kompiliere ich mit CMake, das Qt-Widget mit dem lokalen Debugger (grüne play Button).
Wie kann ich das Qt-Widget ebenfalls mit CMake kompilieren?

Re: Unterstützung bei Framework/Library Installation

Verfasst: Di Aug 02, 2022 8:07 pm
von Pf@nne
Ich habe es jetzt hin, dass sich beide Einzelprojekte (die IEC61850 Library UND das Qt-Widget) mit CMake unter Visual Studio kompilieren (grüner Play-Button "lokaler Windows Debugger") lassen.
Der nächste Schritt wäre jetzt beide Projekte in einem Cmake zu vereinen.....

Hat da jemand einen Plan von?

Re: Unterstützung bei Framework/Library Installation

Verfasst: Mi Aug 03, 2022 6:32 am
von nufan
Hallo :)

Qt unterstützt das Bauen über CMake:
https://doc.qt.io/qt-6/cmake-get-starte ... pplication

Falls es damit Probleme gibt, würde ich bitten deinen Code in minimaler Version zur Verfügung zu stellen (z.B. als ZIP hier hochladen oder in ein öffentliches Repository laden).

Re: Unterstützung bei Framework/Library Installation

Verfasst: Mi Aug 03, 2022 8:17 am
von Pf@nne
Moin,

das bauen von Qt über Cmake habe ich ja schon hingefummelt, genauso wie das Bauen der Library.
Jetzt geht es darum die Library in ein Qt-Widget einzubinden und beides gemeinsam über CMake zu bauen.

Mein Problem ist der strukturelle Aufbau, d.h. wie binde ich was in was ein.
Ich werde versuchen das mal als Repo zur Verfügung stellen.