Cross-compilieren Linux->Windows



  • Es handelt sich um einen Linkfehler. Der Linker kann die entsprechenden Bibliotheken nicht finden. D.h. du musst ihm auch die OpenCV-Bibliotheken fuer Windows anbieten.


  • Mod

    Xx_Mephisto_xX schrieb:

    (Ohne das ich meinen Quelltext dort kompilieren muss)

    Hat das einen tieferen Grund? Es wäre nämlich sicherlich eine wesentlich einfachere Lösung, irgendwo einen Windowsrechner zu finden.

    knivil schrieb:

    Es handelt sich um einen Linkfehler. Der Linker kann die entsprechenden Bibliotheken nicht finden.

    Genauer: Er findet sie schon, aber anscheinend eine Linuxversion.

    Xx_Mephisto_xX schrieb:

    Meine Vermutung ist es, dass eine .so für die cross-Kompilierung nach Windows nicht erwünscht ist.

    Ja, da steckt offensichtlich Bill Gates dahinter, der Linux vom Entwicklermarkt verdrängen möchte, indem er es unmöglich macht, von dort Programme für Windows zu schreiben



  • Gleich vorab: vielen Dank für die schnellen Antworten.

    @knivil: Das ist eben das was ich nicht verstehe. Wenn ich ohne mingw32msvc-g++ sondern lediglich mit g++ kompiliere, dann erscheint dieser linker-fehler nicht. Es funktioniert und mein Programm macht was es soll.

    @SeppJ: Ich habe von einen Kollegen die Bitte erhalten mein Programm ausführbar für seinen Win-Rechner bereitzustellen.(ich selbst benutze ebenfalls Win, doch habe das Programm in (VirutalBox) linux geschrieben.) Dieser möchte sich nicht erst mit kompilieren, Bibliotheken einfügen usw. beschäftigen müssen, sondern lediglich auf die .exe drauf klicken und sein Ding machen.

    Ich hoffe sehr, dass es für mein Problem eine Lösung gibt.

    Die Alternative wäre eine portable Virtual Box und damit hätte er ja dann alles was er bräuchte, aber das ist eben nicht das Ziel und für den Gebrauch des Programmes umständlicher.

    Zum Linkerfehler: Die Konsole gibt mir ja aus: "wrong format". Ich kenne mich nicht so gut aus, aber erwartet der mingw32msvc bezüglich einer bibliothek nicht eine .dll, wenn es unter windows funktionieren soll? und kann daher mit der .so nichts anfangen? (ich bitte um aufklärung, wenn ich blödsinn rede)



  • @SeppJ: Ich habe von einen Kollegen die Bitte erhalten mein Programm ausführbar für seinen Win-Rechner bereitzustellen.(ich selbst benutze ebenfalls Win, doch habe das Programm in (VirutalBox) linux geschrieben.) Dieser möchte sich nicht erst mit kompilieren, Bibliotheken einfügen usw. beschäftigen müssen, sondern lediglich auf die .exe drauf klicken und sein Ding machen.

    Dann installiere Visual C++ Express und kompiliere damit.



  • Vielen Dank für den Tipp. Ich werde mich sogleich ran machen und es probieren.


  • Mod

    Xx_Mephisto_xX schrieb:

    Zum Linkerfehler: Die Konsole gibt mir ja aus: "wrong format". Ich kenne mich nicht so gut aus, aber erwartet der mingw32msvc bezüglich einer bibliothek nicht eine .dll, wenn es unter windows funktionieren soll? und kann daher mit der .so nichts anfangen? (ich bitte um aufklärung, wenn ich blödsinn rede)

    Ja, so ungefähr. Das openCV das dort gefunden wird ist eben nur für Linux. Da ich mal annehme, dass du einfach nur mingw installiert hast und sofort den Übersetzungsvorgang für dein Programm gestartet hast, ist das auch kein Wunder. Schließlich hast du dann keine Windowsversion von OpenCV. Das ist eines der Probleme beim Crosscompiling: Du musst sämtliche Abhängigkeiten auch für das neue System übersetzen. Ich wette, OpenCV hängt selber nochmal von zig anderen Sachen ab. Viel Spaß :p .

    Daher dies:

    knivil schrieb:

    Dann installiere Visual C++ Express und kompiliere damit.

    Dann installierst du noch OpenCV für Windows, das bringt alle seine Abhängigkeiten fertig mit und du bist in 1-2 Stunden fertig, anstatt in 1-2 Tagen für Crosscompiling. Crosscompiling machst du möglichst nur, wenn es nicht anders geht, zum Beispiel wenn du dein Programm für einen Mikrocontroller übersetzt.



  • Du hast mich durchschaut 😉
    Also komm ich wohl nicht drumherum das unter Windows funktionsfähig einzurichten. 😞
    Ich hoffe mal, dass das klappt / ich hinbekomme.
    Vielen Dank für Eure Hilfe. Falls doch noch Probleme auftreten sollten werde ich mich bestimmt nochmal melden 😉 und bis dahin: noch nen schönen Tag



  • Xx_Mephisto_xX schrieb:

    Vielen Dank für den Tipp. Ich werde mich sogleich ran machen und es probieren.

    Dann fass auch nochmal die Klasse Vec3b an und mach den C'tor für ein integer Argument explizit.
    Anschließend stell noch die Zeile 84 um, damit da auch wirklich der C'tor aufgerufen wird, denn Du meinst. Vec3b tmp(0,0,0};

    struct gadget{
      gadget(int, int, int){}
      gadget(int){}
    };
    
    struct widget{
      widget(int, int, int){}
      explicit widget(int){}
    };
    
    int main(){
      gadget g = (0,0,0);  // soll sein gadget g(0,0,0);
      widget w = (0,0,0);  // dto., kompiliert nicht
    }
    

  • Mod

    Xx_Mephisto_xX schrieb:

    Also komm ich wohl nicht drumherum das unter Windows funktionsfähig einzurichten. 😞

    Doch, du kommst drumherum. Aber es wäre so viel Mehraufwand, dass du dich fragen lassen musst, wieso du nicht den einfachen Weg gehst.

    Du kannst schließlich OpenCV und alle seine Abhängigkeiten mit deinem Crosscompiler übersetzen, bevor du dein eigenes Programm angehst. Ist schließlich Open Source. Selbst wenn du den Quellcode von OpenCV nicht hättest, könntest du immer noch versuchen, die fertig herunterladbare Windowsversion zu nehmen und diese dem Linker vorwerfen. Das sollte auch gehen (wäre aber vermutlich nochmal eine Stufe mühsamer).



  • Xx_Mephisto_xX schrieb:

    Zum Linkerfehler: Die Konsole gibt mir ja aus: "wrong format". Ich kenne mich nicht so gut aus, aber erwartet der mingw32msvc bezüglich einer bibliothek nicht eine .dll, wenn es unter windows funktionieren soll? und kann daher mit der .so nichts anfangen? (ich bitte um aufklärung, wenn ich blödsinn rede)

    Du brauchst die .lib Files unter Linux, der Windowsrechner muss die zugehörigen DLLs verfügbar haben (z.B. im selben Verzeichnis wie die .exe). Die .lib Files musst Du mingw zugänglich machen und mit linken.



  • So nach einer doch längeren Testphase habe ich es nun hinbekommen. Und das dank Eurer Hilfe!

    Ich habe also letztlich unter win mithilfe von visualstudio mein Programm kompiliert. (nachdem ich die notwendigen Bibliotheken installiert hatte)
    Ich hatte zuvor noch nie mit visualstudio was gemacht und musste erstmal herausfinden, wie ich dort bibliotheken verlinke, aber nun klappt alles. 🙂

    Nochmals vielen Dank!


Anmelden zum Antworten