OptimLib installieren/bauen

Schnelle objektorientierte, kompilierende Programmiersprache.
poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

OptimLib installieren/bauen

Beitrag von poggo » Mo Aug 24, 2020 2:37 pm

Hallo liebe Community,

ich bin noch nicht so lange bei der C++ Programmierung, daher die evtl. dumme Frage...
Ich bräcuhte die OptimLib Library.
https://github.com/kthohr/optim#install ... ly-library
Ich entwickel auf Windows und mit MSVC, daher dachte ich mir, dass ich die Only-Header Variante installieren will.
Dort steht, dass ich nur die configure Datei mit dem --header-only Parameter ausführen muss, um die Lib zu bauen.
Jedoch verstehe ich das nicht - die config Datei hat keine Endung.
WIe führe ich die Datei aus?
"./configure --header-only-version" geht nicht

Kann mir da jemand helfen ?

Gruß und bleibt gesund

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OptimLib installieren/bauen

Beitrag von Xin » Mo Aug 24, 2020 2:52 pm

Die Frage ist gar nicht so dumm, denn das Thema ist durchaus etwas komplexer. Allerdings ist es weniger ein C++-Thema.

Code: Alles auswählen

configure && make && make install
ist ein üblicher Vorgang um unter Linux ein Programm zu bauen. configure ist dabei ein Bash-Skript, um das auszuführen musst Du also eine Bash zur Verfügung haben. Das habe ich unter Windows noch nicht gemacht, aber grundsätzlich müsste hier stehen, wie das geht:
Windows 10 Linux Bash aktivieren

Ob das "Linux-Subsystem" dann kompatibel genug ist, das bash-Skript durchzuführen, weiß ich nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

Re: OptimLib installieren/bauen

Beitrag von poggo » Mo Aug 24, 2020 4:05 pm

Vielen Dank für die schnelle Antwort !
Ich werde das morgen mal probieren.
Aber wenn ich das dann in Linux baue, ist das daann kompatibel ?
Und bei Header Only - kann ich nicht einfach die .h und .cpp aus dem Repository nehmen und in mein Programm Workspace legen ?
Oder kann das dann evtl wegen Abhängigkeiten nicht gehen ?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OptimLib installieren/bauen

Beitrag von Xin » Mo Aug 24, 2020 8:00 pm

poggo hat geschrieben:
Mo Aug 24, 2020 4:05 pm
Aber wenn ich das dann in Linux baue, ist das daann kompatibel ?
Wenn Du eine Header-Only-Library baust, ist das nicht unwahrscheinlich.
poggo hat geschrieben:
Mo Aug 24, 2020 4:05 pm
Und bei Header Only - kann ich nicht einfach die .h und .cpp aus dem Repository nehmen und in mein Programm Workspace legen ?
Oder kann das dann evtl wegen Abhängigkeiten nicht gehen ?
Das kann ich Dir nicht beantworten, da ich die Abhängigkeiten nicht kenne. Aber anscheinend baut die Lib auf einer anderen Lib auf, womit das Risiko gegeben ist, dass Du eben die andere Lib auch noch ranschaffen musst.
Offenbar baut "configure" die Header-Only-Lib zusammen oder kopiert Dir den Kram passend. Was da im Detail passiert weiß ich nicht. Möglicherweise brauchst Du nur die Header zu übernehmen und fertig.

Die Installationsanweisung ist aber Linux-typisch, ergo auf Windows eher nicht zu gebrauchen. Möglicherweise findest Du irgendwo eine für Windows vorkompilierte Fassung?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

Re: OptimLib installieren/bauen

Beitrag von poggo » Mi Aug 26, 2020 4:11 pm

Ich hatte noch eine virtuelle Box mit Ubuntu drauf, da konnte ich die lib ohne Probleme direkt bauen.

Nun auf mein Windows System kopiert.
Ich versuche ein Beispielcode von der Seite mal zum laufen zu bekommen, leider gibts noch eine Fehlermeldung im Code, die ich noch nicht verstehe
Jedoch hoffe ich das hinzubekommen.

Ich halte euch auf dem laufenden

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OptimLib installieren/bauen

Beitrag von Xin » Mi Aug 26, 2020 4:59 pm

Eine "DLL" von Linux (.so-File) wird unter Windows nicht laufen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

Re: OptimLib installieren/bauen

Beitrag von poggo » Do Aug 27, 2020 7:18 am

Nein, eine DLL ist ja nicht dabei - es handelt sich ja um eine Header Only

poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

Re: OptimLib installieren/bauen

Beitrag von poggo » Do Aug 27, 2020 2:50 pm

ich habe die Header Olny Lib in mein Workspace integriert und (ich benutzt Qt) in meiner pro Datei includiert.
Somit sollte mir die Lib zur Verfügung stehen.

Der folgende Code ist von der Seite der OptimLIb entnommen, nur dass die main (original) nun die optimTest ist.

Code: Alles auswählen

void optimizationApp::optimTest()
{

// initial values:
arma::vec x = arma::ones(2,1) + 1.0; // (2,2)

//

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();

bool success = optim::de(x,ackley_fn,nullptr);

std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;

if (success) {
    std::cout << "de: Ackley test completed successfully.\n"
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
} else {
    std::cout << "de: Ackley test completed unsuccessfully." << std::endl;
}

arma::cout << "\nde: solution to Ackley test:\n" << x << arma::endl;

}

Code: Alles auswählen

double optimizationApp::ackley_fn(const arma::vec& vals_inp, arma::vec* grad_out, void* opt_data)
{
const double x = vals_inp(0);
const double y = vals_inp(1);
const double pi = arma::datum::pi;

double obj_val = -20*std::exp( -0.2*std::sqrt(0.5*(x*x + y*y)) ) - std::exp( 0.5*(std::cos(2*pi*x) + std::cos(2*pi*y)) ) + 22.718282L;

//

return obj_val;
}
Dann erhalte ich in folgender Zeile, folgende Fehlermeldung:

Code: Alles auswählen

bool success = optim::de(x,ackley_fn,nullptr);
error: reference to non-static member function must be called optimizationApp::ackley_fn': non-standard syntax; use '&' to create a pointer to member
Den Fehler kann ich nicht nachvollziehen.

Nun habe ich ein neues Projekt aufgemacht und den Code 1 zu 1 übernommen aus dem Beispiel der Seite.
Jetzt ist der Fehler nicht mehr da ?!
Nun jedoch gibt es Fehler in den Headernder Lib.
Es treten folgende Fehler auf
error: C2039: 'function': is not a member of 'std'
In meinem Workspace liegt neben der OptimLib, die Armadillo Lib (ebenfalls Only Header ) (wer sie nicht kennt: ist eine echt coole performante Mathe Lib, benutz sie seit kurzem und bin begeistert ;) )

Denn die OptimLib ist Abhängig von Armadillo, nun habe ich in die header der OptimLib jeweils ein include "armadillo" eingefügt.
Kann das die Fehlerquelle sein fpr den Fehler C2039 ?

Ich habe den Ansatz von folgender Seite probiert, aer ging nicht https://docs.microsoft.com/en-us/troubl ... e-function

ich arbeite mit MSVC2015x64

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: OptimLib installieren/bauen

Beitrag von nufan » Do Aug 27, 2020 3:17 pm

poggo hat geschrieben:
Do Aug 27, 2020 2:50 pm
Dann erhalte ich in folgender Zeile, folgende Fehlermeldung:

Code: Alles auswählen

bool success = optim::de(x,ackley_fn,nullptr);
error: reference to non-static member function must be called optimizationApp::ackley_fn': non-standard syntax; use '&' to create a pointer to member
Ich nehmen an du willst die Methode "ackley_fn" übergeben, dafür solltest du den Adressoperator & verwenden:

Code: Alles auswählen

bool success = optim::de(x,&ackley_fn,nullptr);
poggo hat geschrieben:
Do Aug 27, 2020 2:50 pm
Nun habe ich ein neues Projekt aufgemacht und den Code 1 zu 1 übernommen aus dem Beispiel der Seite.
Jetzt ist der Fehler nicht mehr da ?!
Nun jedoch gibt es Fehler in den Headernder Lib.
Es treten folgende Fehler auf
error: C2039: 'function': is not a member of 'std'
Wird dort "functional" eingebunden?

Code: Alles auswählen

#include <functional>

poggo
Beiträge: 10
Registriert: Mo Aug 24, 2020 2:19 pm

Re: OptimLib installieren/bauen

Beitrag von poggo » Do Aug 27, 2020 4:20 pm

ich habe testweise "functional" eingebunden.
Dann verschwindet in dem Header der Fehler, jedoch gibts dann diverse verschiedene Fehler in "xfunctional"

zb
C2988: unrecognizable template declaration/definition
C2143: syntax error: missing ';' before '<'
C2433: '_Lex_compare_check_element_types': 'inline' not permitted on data declarations
...
und noch mehr so Random Fehler,

Antworten