写在前面: 本文希望通过一个具体的修改编译安装Ubuntu系统软件包的过程 帮助在编译安装时遇到类似问题的盆友解决问题.
恩, 首先呢, 这个问题仅仅针对启用了 ppa:xorg-edgers/ppa 的 alpha tester 盆友…
这个悲剧已经有两个多月(以上)的历史拉(因为两个多月前Felix才忍不住去report了), 我report的错误参见: https://bugs.launchpad.net/ubuntu/+source/pixman/+bug/623272
不过某位大大(Peter Clifton)给出了解决方案, 这里简单解释一下…
首先获得当前版本的notify-osd的源代码:
sudo apt-get source notify-osd
完成后进入目录, 把下面的patch存成文件 然后用patch命令应用上去:
=== modified file 'src/tile.c'
--- src/tile.c 2009-07-31 11:07:29 +0000
+++ src/tile.c 2010-12-06 00:24:55 +0000
@@ -180,7 +180,7 @@
// top right
cairo_matrix_init_scale (&matrix, -1.0f, 1.0f);
- cairo_matrix_translate (&matrix, -width, 0.0f);
+ cairo_matrix_translate (&matrix, -1.0f * width, 0.0f);
cairo_pattern_set_matrix (pattern, &matrix);
cairo_rectangle (cr,
width - pad_width,
@@ -193,7 +193,7 @@
// bottom right
cairo_matrix_init_scale (&matrix, -1.0f, -1.0f);
- cairo_matrix_translate (&matrix, -width, -height);
+ cairo_matrix_translate (&matrix, -1.0f * width, -1.0f * height);
cairo_pattern_set_matrix (pattern, &matrix);
cairo_rectangle (cr,
pad_width,
@@ -206,7 +206,7 @@
// bottom left
cairo_matrix_init_scale (&matrix, 1.0f, -1.0f);
- cairo_matrix_translate (&matrix, 0.0f, -height);
+ cairo_matrix_translate (&matrix, 0.0f, -1.0f * height);
cairo_pattern_set_matrix (pattern, &matrix);
cairo_rectangle (cr,
x,
然后
patch -p1 -i xxx.patch
再然后, 你一定想各种
./configure && make && sudo make install
啦?
先等等, 为了让它和系统包管理和谐相处, 我们需要在configure的时候加上prefix:
./configure --prefix=/usr
这样是不是就可以了呢?
答案是: 不行!
执行到make时, 会出现类似这样的错误:
CCLD notify-osd
/usr/bin/ld: notify_osd-bubble.o: undefined reference to symbol 'XDeleteProperty'
/usr/bin/ld: note: 'XDeleteProperty' is defined in DSO /usr/lib64/libX11.so.6 so try adding it to the linker command line
/usr/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[3]: *** [notify-osd] Error 1
make[3]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29'
make: *** [all] Error 2
我的解决方法是: configure时带上LIBS环境变量!
先带上提示缺少的libX11吧:
LIBS="-lX11" ./configure --prefix=/usr
让我们试试make?
还是不行!
错误应该和下面的提示类似:
CCLD notify-osd
/usr/bin/ld: notify_osd-gaussian-blur.o: undefined reference to symbol 'pixman_image_composite'
/usr/bin/ld: note: 'pixman_image_composite' is defined in DSO /usr/lib64/libpixman-1.so.0 so try adding it to the linker command line
/usr/lib64/libpixman-1.so.0: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[3]: *** [notify-osd] Error 1
make[3]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29'
make: *** [all] Error 2
那么是不是再加上 -lpixman 呢? 还是不对…
注意看库文件的文件名: libpixman-1.so.0
因此需要加上的是: -lpixman-1
这样完整的configure命令应该是:
LIBS="-lX11 -lpixman-1" ./configure --prefix=/usr
之后淡定的
make
就好了.
接下来如果用
sudo make install
不怎马和谐(非包管理嘛)
如果像下面这么用checkinstall:
sudo checkinstall --pkgname=notify-osd --pkgversion "0.9.29-0ubuntu5+felix1" --backup=no --default
安装完成后试试更新系统, 会发现提示安装notification-daemon…
因此我们需要指明notify-osd包”提供了”notification-daemon”
完整的checkinstall命令如下:
sudo checkinstall --pkgname=notify-osd --pkgversion "0.9.29-0ubuntu5+felix1" --backup=no --default --provide=notification-daemon
安装完成后, 试试
notify-send test
纳尼? 边框仍然不完整? 事实上, 我们刚才编译的新版本并没有在运行…
先杀掉系统里仍然运行的老版本notify-osd:
sudo killall notify-osd
然后再来测试, OK 成功!
PS: 作为一只懒猫 我深刻理解懒人的想法, 因此我把编译打包好的版本放在了: http://deb.felixcat.net 有兴趣直接拿的盆友们, 伸爪吧!
fy,我是DB。统计软件又出问题了,你看一下吧~我一个月前就给你发QQ消息了,一直没看到你反应。如果有空,尽快帮忙弄下吧,各个群在等着用~应该是QQ邮箱改版弄的,修改起来也快。谢谢~
日期:2010-12-22
Deep Blue 20:33:52
fy,还好吗?忙不~
统计软件又出问题了,读取不了邮件,你看下吧~等你的修正~
呀 真抱歉 我一直没上Q = =||