README.COMPILATION.PROBLEMS
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:
生物技术
开发平台:
C/C++
- bzip2-1.0 should compile without problems on the vast majority of
- platforms. Using the supplied Makefile, I've built and tested it
- myself for x86-linux, sparc-solaris, alpha-linux, x86-cygwin32 and
- alpha-tru64unix. With makefile.msc, Visual C++ 6.0 and nmake, you can
- build a native Win32 version too. Large file support seems to work
- correctly on at least alpha-tru64unix and x86-cygwin32 (on Windows
- 2000).
- When I say "large file" I mean a file of size 2,147,483,648 (2^31)
- bytes or above. Many older OSs can't handle files above this size,
- but many newer ones can. Large files are pretty huge -- most files
- you'll encounter are not Large Files.
- Earlier versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide
- variety of platforms without difficulty, and I hope this version will
- continue in that tradition. However, in order to support large files,
- I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile.
- This can cause problems.
- The technique of adding -D_FILE_OFFSET_BITS=64 to get large file
- support is, as far as I know, the Recommended Way to get correct large
- file support. For more details, see the Large File Support
- Specification, published by the Large File Summit, at
- http://www.sas.com/standard/large.file/
- As a general comment, if you get compilation errors which you think
- are related to large file support, try removing the above define from
- the Makefile, ie, delete the line
- BIGFILES=-D_FILE_OFFSET_BITS=64
- from the Makefile, and do 'make clean ; make'. This will give you a
- version of bzip2 without large file support, which, for most
- applications, is probably not a problem.
- Alternatively, try some of the platform-specific hints listed below.
- You can use the spewG.c program to generate huge files to test bzip2's
- large file support, if you are feeling paranoid. Be aware though that
- any compilation problems which affect bzip2 will also affect spewG.c,
- alas.
- Known problems as of 1.0pre8:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * HP/UX 10.20 and 11.00, using gcc (2.7.2.3 and 2.95.2): A large
- number of warnings appear, including the following:
- /usr/include/sys/resource.h: In function `getrlimit':
- /usr/include/sys/resource.h:168:
- warning: implicit declaration of function `__getrlimit64'
- /usr/include/sys/resource.h: In function `setrlimit':
- /usr/include/sys/resource.h:170:
- warning: implicit declaration of function `__setrlimit64'
- This would appear to be a problem with large file support, header
- files and gcc. gcc may or may not give up at this point. If it
- fails, you might be able to improve matters by adding
- -D__STDC_EXT__=1
- to the BIGFILES variable in the Makefile (ie, change its definition
- to
- BIGFILES=-D_FILE_OFFSET_BITS=64 -D__STDC_EXT__=1
- Even if gcc does produce a binary which appears to work (ie passes
- its self-tests), you might want to test it to see if it works properly
- on large files.
- * HP/UX 10.20 and 11.00, using HP's cc compiler.
- No specific problems for this combination, except that you'll need to
- specify the -Ae flag, and zap the gcc-specific stuff
- -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce.
- You should retain -D_FILE_OFFSET_BITS=64 in order to get large
- file support -- which is reported to work ok for this HP/UX + cc
- combination.
- * SunOS 4.1.X.
- Amazingly, there are still people out there using this venerable old
- banger. I shouldn't be too rude -- I started life on SunOS, and
- it was a pretty darn good OS, way back then. Anyway:
- SunOS doesn't seem to have strerror(), so you'll have to use
- perror(), perhaps by doing adding this (warning: UNTESTED CODE):
- char* strerror ( int errnum )
- {
- if (errnum < 0 || errnum >= sys_nerr)
- return "Unknown error";
- else
- return sys_errlist[errnum];
- }
- Or you could comment out the relevant calls to strerror; they're
- not mission-critical. Or you could upgrade to Solaris. Ha ha ha!
- (what?? you think I've got Bad Attitude?)
- * Making a shared library on Solaris. (Not really a compilation
- problem, but many people ask ...)
- Firstly, if you have Solaris 8, either you have libbz2.so already
- on your system, or you can install it from the Solaris CD.
- Secondly, be aware that there are potential naming conflicts
- between the .so file supplied with Solaris 8, and the .so file
- which Makefile-libbz2_so will make. Makefile-libbz2_so creates
- a .so which has the names which I intend to be "official" as
- of version 1.0.0 and onwards. Unfortunately, the .so in
- Solaris 8 appeared before I decided on the final names, so
- the two libraries are incompatible. We have since communicated
- and I hope that the problems will have been solved in the next
- version of Solaris, whenever that might appear.
- All that said: you might be able to get somewhere
- by finding the line in Makefile-libbz2_so which says
- $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.2 $(OBJS)
- and replacing with
- $(CC) -G -shared -o libbz2.so.1.0.2 -h libbz2.so.1.0 $(OBJS)
- If gcc objects to the combination -fpic -fPIC, get rid of
- the second one, leaving just "-fpic".
- That's the end of the currently known compilation problems.