近日心血来潮,决定装了个Ubuntu 9.10 live cd做编程开发。没想到wbui.exe也不是什么方便的东西,如果在安装之前你不幸选择了简体中文~~~~呵呵,不好意思,慢慢等吧,它会慢悠悠地连接到国外,为你用心良苦的下载中文依赖包(如果你家早已光纤入屋,那恭喜,你是不会有这个麻烦的)。没有一个晚上,绝对搞不定~~
建议:
1、安装英文版。装好了系统再上网下载,至少你能看到界面,可以做做简单操作~心里踏实。
2、苦心下载一个4.5g dvd版的ubuntu。中文正常的很,不过好像装好后是繁体,还是要上网下载简体中文包(如果你不介意繁体,那算是解决问题)
3、如果很不幸掉进了简体中文,不要害怕,在它下载安装包的过程中,按下crtl+alt+F2,调到其他工作界面,常用字符节目的应该都很熟悉,然后用ps aux查看那里是apt-get的程序进程,找到pid,把它kill掉就ok了。它就会进入后续安装,马上就要有系统界面了!!有了节目,大家都有种感觉,踏实了,linux平安到布~~~
近期闹得火红的小日本B+数据库tokyocabinet(以下简称tc),性能确实不容置疑,但是安装却老是出问题,问题都出自于一大堆的依赖错误。要搞定确实折腾!主要问题是tc要依赖bzip2,还有libbz2这个linux常规压缩工具。说是常规,但是ubuntu,opensuse常规是不会安装的。搞不懂,哪来常规。
也许常规是对Radhat而言的,我用5.3企业版的radhat不会出现这种麻烦事。
因为工具太常规所以一般人不会注意问题所在,更有看过,网上认为这是tokyocabinet一个bug。
言归正传,说说具体问题吧。
问题:
1、tc make file时候,当碰到依赖libbz2.a或者libz.a这两个库的时候会出现编译错误。
诸如:
缺少zlib.h这个文件
//******************************************************************************************************************************//
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: ld 返回 1
make: *** [libtokyocabinet.so.8.22.0] 错误 1
//******************************************************************************************************************************//
/usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value
make: *** [libtokyocabinet.so.8.22.0] 错误 1
//******************************************************************************************************************************//
凡是这两个问题,很重要一个原因是bzip的开发依赖包没有装好,或者没装。
首先要下载这两个安装包
1、bzip2-1.0.4.tar.gz
2、zlib-1.2.3.tar.gz
我上网找过很多解决方法。但是问题依旧,依然编译不过去。
即使用了ubuntu的apt-get install libbz2-dev。。。
网上一般都是修改bzip源码包的Makefile文件。(装个小东西,知识一定要丰富!)
网上的解决方法:
在gcc编译参数中加入-fPIC(对于该参数,我在备注中有解释,适合菜鸟级c语言用户理解)
但是问题,有时后就只刁难你,还是不怎么奏效。
我总结了一下方法:
1、注意顺序问题:(这三个东西一环扣一环,真麻烦)
如果发现 libbz2.a: could not read symbols: Bad value
就应该把/usr/local/lib中的libbz2.a删掉
进入解压缩的zlib-1.2.3目录,用make clean命令清理一下。
同样,/usr/local/lib/libz.a: could not read symbols
操作同上,删掉libz.a,把bzip2-1.0.4目录的编译文件清理一下。
如果找不到这两个文件的位置,可以在终端敲上:
find -name libbz2.a
....
2.修改zlib-1.2.3的Makefile文件
把gcc的编译参数加上 -fPIC
原文:CFLAGS=-O3 -DUSE_MMAP
修改为:CFLAGS=-O3 -DUSE_MMAP -fPIC
如果还是过不去,劝你硬来CC=gcc 直接后面跟上-fPIC让他们全部独立编译
重申:如果你之前编译过了,一定要用make clean清掉,否则还是徒劳。。
最后make 还有 make install
3.修改bzip2-1.0.4的Makefile文件
CC=gcc -fPIC 《===这个就是我发飙的结果,全部让他 -fPIC
AR=ar
RANLIB=ranlib
LDFLAGS=
BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES) 《===当然这里也可以加上
同样,bzip2有一个Makefile-libbz2_so的文件,编译时会调用,当然你也可以单个编译:
make -f Makefile-libbz2_so
make clean <------------保守建议,还是clean一下
make
make install
具体bzip2的安装方法可以参照:
http://lamp.linux.gov.cn/Linux/LFS-6.2/chapter06/bzip2.html
最后重新安装tc
我用的是最新版本:tokyocabinet-1.4.31.tar.gz
估计应该修复了一些bug。
make clean
make
当输出:
#================================================================
# Ready to install.
#================================================================
一切ok,装吧 make install
测试下tc
/web/ttserver# tchmgr create test.tch
/web/ttserver# ls
test.tch
/web/ttserver# tchmgr put test.tch 1 test1
/web/ttserver# tchmgr put test.tch 2 test2
/web/ttserver# tchmgr get test.tch 2
test2
测试成功!
(opensuse用户,不能安装tokyocabinet的,也可以按照此方法修改Makefile文件)
备注:
fPIC参数解释:
-fpic
原文:Position independant code, needed for shared libraries.
我的理解:独立编译代码,需要共享苦支持(菜鸟级译法)
-fPIC
Position independant code, needed for shared libraries.
I am a bit in the dark what exactly the difference between -fpic and -fPIC is. It seems that -fPIC works always while -fpic produces smaller object files.
我的理解:这两个参数的不同在于,下面这个是总会执行,上面小写的只提供更小的对象文件编译。
(摘自:163博客,http://liuziheng5726.blog.163.com ,我的旧博客~~)
相关推荐
libbz2.dll
支持 x264, faac ,png,mp3, zlib
lib of Linux for Zipx
elfutils-libs-0.152-1.el6.i686.rpm是centos工具包。
PS:添加以后只需要libz.tbd,libbz2.tbd,libbz2.1.0.tbd和libiconv.tbd就可以编译通过 但是再写了代码之后跑不通了,又花了将近一天时间发现还需要添加VideoToolBox,CoreVideo,AVFoundation和CoreMedia这几个...
图形Magick建立z CFLAGS =“-g -O3 -fPIC” ./configure --prefix = $ {INSTALL_DIR} 制作进行安装建立bz2 make -f Makefile-libbz2_so 进行安装PREFIX = $ {INSTALL_DIR} cp libbz2.so.1.0.6 $ {INSTALL_DIR} / lib...
视频播放框架,可用于直播等视频播放。...libbz2.tbd libz.tbd MediaPlayer.framework MobileCoreServices.framework OpenGLES.framework QuartzCore.framework UIKit.framework VideoToolbox.framework
bzip压缩库
bzip2-1.0.6库文件
arm-nono-linux-gnueabi lib
make -f Makefile-libbz2_so make clean -f 标志使 Bzip2 根据另一个 Makefile 来编译,也就是这里的 Makefile-libbz2_so 文件,它创建一个动态的 libbz2.so 库文件,然后把 Bzip2 工具连接到这个库上 如果要重新...
bzip2库下载:bzlib.h;bzip2.lib;libbz2.dll.a;bzip2-bcc.lib
iOS平台,包含libx264及fdk-aac的FFmpeg头文件及lib文件 ...1. libbz2.tbd 2. libz.tbd 3. libiconv.tbd 4. CoreMedia.framework 5. VideoToolbox.framework 6. AudioToolbox.framework 7. AVFoundation.framework
标准bzip进行裁剪和简单封装,可以copy过去直接编译使用的; 可以通过调用libbz2.a库集成到其他的环境中(交叉编译); 参考bzip2的调用
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
可以打开一些ons的游戏,可以在Windows上玩gal****
libbz2.lib libcdio.lib libcdio_paranoia.lib libfontconfig.lib libfreetype.lib libfribidi.lib libgcrypt.lib libgme.lib libgmp.lib libgnutls.lib libgpg-error.lib libharfbuzz.lib libhogweed.lib libiconv....
一、内容概况 QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,...当前采用的版本为libbz2-1.0.6,如果下载者,需要其他版本的libbz2,请在评论区留言。
一、内容概况 QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,...当前采用的版本为libbz2-1.0.6,如果下载者,需要其他版本的libbz2,请在评论区留言。
一、内容概况 QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,...当前采用的版本为libbz2-1.0.6,如果下载者,需要其他版本的libbz2,请在评论区留言。