2011-01-04 10 views
5

Niedawno spędziłem trochę czasu pracując nad pobieraniem wersji 1.44.0 opartej na oknach z obsługą zarówno iostreams dla filtrów kompresujących b2z22 zlib &. Z różnych powodów postanowiono umożliwić rozbudowę bibliotek zlib2 zlib & ze źródła. Co jest warte, ale nie sądzę, aby miało to znaczenie, wersja MSVC, której używam, to VC9 (VS2008). Zauważ też, że z mojego pobieżnego badania ta kwestia powinna odnosić się do każdej wersji boost z wbudowanym programem iostreams opartym na bzip2 w systemie Windows.Podnieś iostreams z bzip2 zbudowanym ze źródła na windows

Zwiększenie wydajności dzięki określeniu -sZLIB_SOURCE=<PATH> i -sBZIP2_SOURCE=<PATH>. Zauważono jednak, że biblioteki boost_iostreams * .dll zależały od libbz2.dll (zamiast boost_bzip2 * .dll), które nie istniało. Boost, udało się jednak pomyślnie zbudować boost_bzip2 * .dll. Zwróć uwagę, że używam symbolu wieloznacznego jako symbolu zastępczego dla wszystkich informacji o wariancie kompilacji.

Problem:

Gdzieś zakodowane zależność do libbz2.dll istnieje.

Rozwiązanie:

Najprostsze rozwiązanie I stwierdzono, było zmodyfikowanie libbz2.def dołączone do źródła bzip2. Mianowicie, usunąć linię (od bzip2 v1.0.6, to linia 1):

LIBRARY   LIBBZ2 

Usunięcie tej linii eliminuje zakodowane zależność do DLL o nazwie „libbz2.dll”. Pozwala to na tworzenie bibliotek o nazwie boost_bzip2 * .dll i wygenerowanych plikach * .lib i * .exp, które odpowiednio rozwiązują się do odpowiednio nazwanej biblioteki DLL, a także eksportują wszystkie niezbędne funkcje.

Przeprosiny:

żal zamieszczając samodzielne odpowiadając pytanie, ale nie mogę znaleźć żadnego rozwiązania tego konkretnego problemu w internecie lub na SO. Wezwę też powyższe rozwiązanie jako odpowiedź, ale pozostawi to niedopuszczone na jakiś czas, na wypadek gdyby ktoś wymyślił czystsze rozwiązanie. (tzn. taki, który można zrobić, nadal pozwala na zwiększenie liczby bibliotek zlib2 zlib & ze źródła, ale nie wymaga żadnych modyfikacji w celu zwiększenia lub źródła bzip2).

Odpowiedz

3

Najprostszym rozwiązaniem, jakie znalazłem, było zmodyfikowanie libbz2.def dołączonego do źródła bzip2. Mianowicie, usunąć linię (od bzip2 v1.0.6, to linia 1):

LIBRARY LIBBZ2 

Usunięcie tej linii eliminuje zakodowane zależność do DLL o nazwie „libbz2.dll”. Pozwala to na tworzenie wbudowanych bibliotek o nazwach boost_bzip2 * .dll i wygenerowanych plikach * .lib i * .exp, które odpowiednio rozpoznają odpowiednią bibliotekę DLL, a także eksportują wszystkie niezbędne funkcje.

+0

Dzięki za udostępnienie tego. Rzeczywiście rozwiązuje problem. –

Powiązane problemy