msvc BZ2_bzCompressInit detecting problem

Christian Ehrlicher Ch.Ehrlicher at gmx.de
Mon Apr 9 10:14:03 CEST 2007



Ralf Habacker schrieb:
> Christian Ehrlicher schrieb:
>> Ralf Habacker schrieb:
>>   
>>> Hi,
>>>
>>> the last bzip2 releases have problems to detect BZ2_bzCompressInit.
>>>
>>> I've added a testcase which runs well using mingw, but fails with msvc
>>> with the following error (The full compile log is added below)
>>>
>>> CheckFunctionExists.obj : error LNK2019: Verweis auf nicht aufgel”stes
>>> externes Symbol "_BZ2_bzCompressInit" in Funktion "_main".
>>>
>>>
>>>
>>> While I tracked this problem down and fixed for mingw, I cannot see any
>>> error why msvc fails in this area.
>>>
>>> Is anyone there who can solve this problem ?
>>>
>>>     
>> Who created the bzip2 package? I don't think I created them because I
>> never would create bzip2d.lib and I *know* that it worked with the
>> package I uploaded. In the current package, all is messed up again!
>> bzip2d.lib is also *never* needed...
>> If you don't know how to handle name mangling please don't touch the
>> import libs!
>>   
> Christian Ehrlicher schrieb:
>> Ralf Habacker schrieb:
>>   
>>> Hi,
>>>
>>> the last bzip2 releases have problems to detect BZ2_bzCompressInit.
>>>
>>> I've added a testcase which runs well using mingw, but fails with msvc
>>> with the following error (The full compile log is added below)
>>>
>>> CheckFunctionExists.obj : error LNK2019: Verweis auf nicht aufgel”stes
>>> externes Symbol "_BZ2_bzCompressInit" in Funktion "_main".
>>>
>>>
>>>
>>> While I tracked this problem down and fixed for mingw, I cannot see any
>>> error why msvc fails in this area.
>>>
>>> Is anyone there who can solve this problem ?
>>>
>>>     
>> Who created the bzip2 package? I don't think I created them because I
>> never would create bzip2d.lib and I *know* that it worked with the
>> package I uploaded. In the current package, all is messed up again!
>> bzip2d.lib is also *never* needed...
>> If you don't know how to handle name mangling please don't touch the
>> import libs!
>>   
> The bzip2 package uploaded before does not work for me neither with 
> mingw nor with msvc. BZ2_bzCompressInit wasn't found in both cases.
> 
Then your setup was wrong.
> Then I downloaded the source package which has cmake support, fixed the 
> not found issue for mingw by adding the --kill-at linker flag and run.
> 
> mkdir bzip2-build
> cd bzip2-build
> cmake -G "MinGW Makefiles" ..\bzip2 -DCMAKE_BUILD_TYPE=Release
> mingw32-make install
> cmake -G "MinGW Makefiles" ..\bzip2 -DCMAKE_BUILD_TYPE=Debug
> mingw32-make install
> cmake -G "NMake Makefiles" ..\bzip2 -DCMAKE_BUILD_TYPE=Release
> nmake install
> cmake -G "NMake Makefiles" ..\bzip2 -DCMAKE_BUILD_TYPE=Debug
> nmake install
> kdewin-packager -name bzip2 -version 1.0.4-3 -root c:\Programme\bzip2 
> -srcroot ..\bzip2 -complete
> Then I got 5 packages
> 
> bzip2-1.0.4-3-bin.zip  -> containing release libraries and tools (for 
> end user)
> bzip2-1.0.4-3-lib.zip   -> containing development header, debug 
> libraries and debug/release import libraries  (dor developers)
> bzip2-1.0.4-3-doc.zip -> contains package documentation  (mainly for 
> developers, also for end users)
> bzip2-1.0.4-3-src.zip  -> complete source package to recompile exactly 
> the binary packages
> bzip2-1.0.4-3.zip        -> contains bin/lib/doc package content for 
> single download
> 
> For my opinion this standard prodecure ensures to have complete packages 
> with all required files for debug and release binaries, which is easy to 
> recompile for everybody using the source package which has to be 
> complete to generate all above mentioned binary packages.
This is far to much work for a simple C system lib. It's enough to
create *one* shared lib and two import libs (one for mingw & one for
msvc). Debug and Release is really not needed here!
> 
> As far as I can see the general package layout should have 4 types of 
> libraries
> 
> mingw release
> mingw debug
> msvc release
> msvc debug
> 
This is maybe tue for c++ libs but not needed for C.
> This is already available for qt and kdewin32 and other packages. 
> Libraries are distingushed by the prefix (mingw='lib' msvc='') and a 
> postfix (release='', debug='d')
> for example:
> 
> mingw release  -> libstreams.dll
> msvc release    -> streams.dll
> 
> mingw debug -> libstreamsd.dll
> msvc debug    -> streamsd.dll
> 
> or
> 
> mingw release  -> libkdewin32.dll
> msvc release    -> kdewin32.dll
> 
> mingw debug -> libkdewin32d.dll
> msvc debug    -> kdewin32d.dll
> 
> CMAKE has build in support for adding the prefix and a specific variable 
> to define the debug postfix -> set (CMAKE_DEBUG_POSTFIX "d")
> 
> Headers and doc are common for the 4 types
> 
> Why should we not use this layout for all packages to make it easier for 
> package maintainers ?
Because it's to much work. And because we should stay in sync with
gnuwin32 as much as needed.
> 
> Optimizing single package to have only one dll requires additional 
> manual attention and work and does not reduce binary package size very 
> much, so I doubt that the additional work would be worth.
No, see private mail.
> 
> Additional having all debug libraries in the binary packages makes it 
> easier for people to get into the last corner of the code by themself, 
> which reduces the requires package support. Addional I remember that 
> with msvc mixing release and debug libraries does not work, so we have 
> to support debug and release libraries.
This is just true for C++ libs, debug is not needed unless you pass
FILE* - pointers (and other really specific stuff). And do you really
think someone wants to debug a system lib at all?
> 
> Are there any objectivities against this point of view ?
> 
I wonder why you now moved from the normal way it was done the last
months to another, gnuwin32 incompatible, method.

Christian



More information about the Kde-windows mailing list