2011-01-04 4 views
5

Vor kurzem habe ich einige Zeit arbeiten auf Boost Version 1.44.0 gebaut auf Windows mit beiden Iostreams Unterstützung für beide zlib & bzip2 Kompressionsfilter. Aus einer Vielzahl von Gründen wurde beschlossen, Boost zu erlauben, beide zlib & bzip2-Bibliotheken aus der Quelle zu erstellen. Für was es wert ist, aber ich denke nicht, dass es wichtig ist, die Version von MSVC, die ich verwende, ist VC9 (VS2008). Beachten Sie auch, dass dieses Problem von meiner oberflächlichen Untersuchung auf jede Version von Boost mit iostreams, die gegen bzip2 unter Windows gebaut wurden, zutreffen sollte.Boost Iostreams mit bzip2 von der Quelle auf Windows

Boost sauber aufgebaut, indem -sZLIB_SOURCE=<PATH> und -sBZIP2_SOURCE=<PATH> angegeben werden. Es wurde jedoch festgestellt, dass die DLLs boost_iostreams * .dll von libbz2.dll (anstelle von boost_bzip2 * .dll) abhängig waren, die nicht existierten. Boost, hat jedoch boost_bzip2 * .dll erfolgreich erstellt. Beachten Sie, dass ich den Platzhalter als Platzhalter für alle Informationen zur Build-Variante verwende.

Problem:

irgendwo eine hartcodierte Abhängigkeit besteht libbz2.dll.

Lösung:

Die einfachste Lösung, die ich gefunden, war libbz2.def mit der bzip2 Quelle enthalten zu ändern. Das heißt, löschen Sie die Zeile (ab bzip2 v1.0.6 ist es Zeile 1):

LIBRARY   LIBBZ2 

diese Zeile Entfernen der hartcodierte Abhängigkeit zu einer DLL eliminiert namens „libbz2.dll“. Dies erlaubt dann den Boost-Built-Bibliotheken namens boost_bzip2 * .dll und den generierten * .lib und * .exp-Dateien, ordnungsgemäß in die entsprechend benannte DLL aufzulösen, sowie alle notwendigen Funktionen zu exportieren.

Apologies:

Sorry für eine Selbst Beantwortung Frage veröffentlichen, aber ich habe keine Lösung für dieses spezielle Problem im Internet nicht finden, oder auf SO. Ich werde die obige Lösung auch als Antwort veröffentlichen, werde sie aber für eine Weile nicht akzeptieren, wenn jemand eine sauberere Lösung vorschlägt. (d. h. man kann noch boost machen, um die zlib & bzip2-Bibliotheken aus der Quelle zu erstellen, benötigt aber keinerlei Modifikationen, um die Quelle zu boosten oder bzip2).

Antwort

3

Die einfachste Lösung, die ich gefunden habe, war, libbz2.def zu modifizieren, die in der bzip2-Quelle enthalten ist. Das heißt, löschen Sie die Zeile (ab bzip2 v1.0.6 ist es Zeile 1):

LIBRARY LIBBZ2 

diese Zeile Entfernen der hartcodierte Abhängigkeit zu einer DLL eliminiert namens „libbz2.dll“. Dies ermöglicht dann, dass die Boost-Built-Bibliotheken namens boost_bzip2 * .dll und generierte * .lib- und * .exp-Dateien ordnungsgemäß in die entsprechende DLL aufgelöst werden und alle erforderlichen Funktionen exportiert werden.

+0

Vielen Dank für das Teilen. In der Tat löst das Problem. –

Verwandte Themen