gentoo 系统中 mysql 5.1 与 amarok相互block问题的解决办法

发布: 2010-04-19 16:41

mysql-5.1.45
amarok-2.3.0.99

问题,开启amarok[embedded] USE后,链接默认MYSQL编译出来的libmysqld.a的时候出错:


Linking CXX shared module ../../../../../lib/amarok_collection-mysqlecollection.so
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib64/mysql/libmysqld.a(client.o): relocation R_X86_64_32 against `mysql_server_last_error' can not be used when making a shared object; recompile with -fPIC
/usr/lib64/mysql/libmysqld.a: could not read symbols: Bad value
collect2: ld 返回 1
make[2]: *** [lib/amarok_collection-mysqlecollection.so] 错误 1
make[1]: *** [src/core-impl/collections/sqlcollection/mysqlecollection/CMakeFiles/amarok_collection-mysqlecollection.dir/all] 错误 2
make: *** [all] 错误 2

而如果去年embeded USE的话,amarok需要连接到已经启动的mysql服务器,额外为了这个软件再启动一个mysql实在不协调,所以不能去掉这个USE。

需要修改的地方有3个,
1. 在/etc/make.conf的CFLAGS中临时加入 -fPIC,重新编译mysql-5.1.45。编译完成后去掉,防止影响系统上其他的包。

2. 修改mysql-5.1.45的ebuild, 注释一行,
# RDEPEND="!media-sound/amarok[embedded]"
我是把这个文件拷贝到自己创建的portage树中做的,否则emerge --sync后又回来了。

3. 同2, 修改amarok-2.3.0.99.ebuild,注释一行,
# embedded? ( <dev-db/mysql-5.1[embedded,-minimal] )

对这几个文件重新ebuild xxx digest一下。

这样,amarok与 mysql-5.1.x就能存了,amarok也能使用mysql-5.1.x的libmysqld.a了。

当然也不是完善的方法,可能破坏系统的完整性,系统维护更复杂了,如果暂时不需要,还是mask掉mysql-5.1,更直接了当些,等gentoo开发者们处理好这个问题再改回来。

这个问题自从amarok使用embedded mysql和mysql发布5.1.x以来一直存在,现在终于不完善解决了,先这么用着。


原文: http://qtchina.tk/?q=node/425

Powered by zexport