2017-07-21 1 views
2

Ich benutze Mingw64 für Windows (natürlich), und ich stehe normalerweise statisch gegen libwinpthread.a. Aber ich habe bemerkt, dass es auch eine Bibliothek namens libpthread.a gibt (ohne den Gewinn). Ich kann sehen, dass sie unterschiedliche Größen haben, also muss etwas anders sein. Wenn ich ein sehr einfaches Programm mit Thread-Bibliothek erstellt, kann ich sehen, dass der kompilierte Code auch in anderen Größen ist, wenn ich das Tag -libpthread anstelle von -libwinpthread verwenden.Der Unterschied zwischen libwinpthread.a und libpthread.a?

Ich weiß, dass winpthread eine BSD-Lizenz verwendet. Und in Linux nutzt pthread die LGPL-Lizenz. Kann es also etwas an der Lizenz geben? Vielleicht benutzt libpthread LGPL und libwinpthread benutzt BSD? Ich weiß es nicht.

Ich hoffe, dass jemand hier mir helfen kann. Etwas muss anders sein, denn ich bekomme ein anderes Ergebnis.

+0

Ich vermute - raten - dass libwinpthread.a verbindet libpthread.a und soll Ihnen ermöglichen, nahtlos mit Pthreads unter Windows und Linux zu kompilieren. Wenn Sie nur für Linux kompilieren, glaube ich nicht, dass Sie libwinpthread überhaupt verknüpfen müssen. – hoodaticus

+0

Vielleicht so :). Könnte sein. Aber nachdem ich diese Frage gesendet habe, habe ich einen Hex-Editor verwendet, um diese Dateien zu vergleichen. Und in libthread kann ich den Text "nanosleep.c" sehen, aber in libwinpthread existiert es nicht. Ich weiß nicht warum :(. Ich denke, es gibt mehr Unterschiede, aber ich bin zu faul, jedes Byte zu vergleichen :). – mikehog

+0

Nanosleep ist unter Windows nicht verfügbar, da Windows für seinen Vertrag keine Betriebssystemunterstützung bietet. Dies beweist im Grunde meine Theorie. – hoodaticus

Antwort

0

Das ist peinlich, aber ich finde endlich den Unterschied zwischen libpthread.a und libwinpthread.a. Sie sind 99,9% (man könnte sagen, 100%) identisch.

Der einzige Unterschied ist, dass libwinpthread.a mehr komprimiert ist. Ich habe versucht, den winpthread-Code mit make-command zu kompilieren. Und dann installiere ich es mit "make install" -Befehl. Aber wenn ich es stattdessen mit "make install-strip" installiere, wird es eine a-Datei ohne Symboltabelle installieren. Mit genau dem gleichen Ergebnis wie die bereits installierten a-Dateien.

Verwenden Sie also den Tag -lwinpthread, wenn Sie Winpthread (statische Verknüpfung) ohne Symboltabelle verwenden möchten. Wenn Sie die Symboltabelle für Winpthread verwenden möchten, verwenden Sie das Tag -lpthread.

Eine statische Bibliothek (a-Datei) ist nur ein Archivformat (wie tar) mit O-Dateien darin. Um eine a-Datei anzuzeigen, benötigen Sie für Windows entweder mingw-w64, cygwin oder msys2 oder ähnliches. So eine a-Datei anzeigen, indem Sie in einem Terminal zu schreiben: ar -t -file.a

Wenn Sie die a-Datei extrahieren möchten Sie schreiben können: ar -x datei.a

Jetzt werden Sie Habe mehrere O-Files. Sie können den Inhalt innerhalb einer o-Datei durch Schreiben anzuzeigen: nm -C file.o

Wenn Sie eine o-Datei diassembler möchten Sie einfach schreiben: objdump -D file.o

Oder schreiben Die Daten in eine Datei: objdump -D Datei.o> obj_arm.txt

Machen Sie das mit einer O-Datei von libpthread und einer O-Datei von libwinpthread. Und dann vergleichen Sie die TXT-Dateien mit Ihrer bevorzugten Software. Sie werden 100% identisch sein.

+0

Eine statische Bibliothek * ist * ein ['ar'] (https://en.wikipedia.org/wiki/Ar_ (Unix)) Archiv von Objektdateien, aber' AR'-Archive sind nicht komprimiert. Mehr wie 'Teer' als' Zip'. –

+0

Danke :). Bearbeite meine Antwort. – mikehog

Verwandte Themen