免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1351 | 回复: 1
打印 上一主题 下一主题

实在是有个问题要问: 如何保证GTK程序的系统独立性? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-11 13:39 |只看该作者 |倒序浏览
我发现升升级,改改locale这些一般的操作都能让gtk程序出现各种错误:依赖的库无法安装,utf-8解析错误。。。。。

在debian下没有这些问题, 不过你给人家装,总得用个好玩的吧,而对于ubuntu而言,最好的解决方法就是从装。。。

恩,百试不爽的方法。。。。。

我试过各种方法解决独立性问题,最理想的静态编译,一直没有成功, 估计是pango库的关系。。。。

看过google earth的方法就是把动态库放当前目录。。。。这个还没实验,那字体文件等咋办??

哪位大侠有静态编译GTK成功的经验? 感觉这个问题不除,GTK程序的兼容性就有点问题,一会1.2一会2.0的。。。。。。

论坛徽章:
0
2 [报告]
发表于 2009-02-11 13:52 |只看该作者

.

不知道这个方法大家试过没:

环境变量LD_LIBRARY_PATH也可保存目录列表,

装载附加的共享库

在ELF系统上,为了执行一个ELF文件,内核要把控制权交给动态连接器
ld-linux.so.1。

动态连接器执行以下一个步骤完成从程序到进程映象:
1.分析可执行文件中的动态信息section,决定需要哪些库。
2.定位和映象(map)那些共享库,并且分析它们动态信息section
决定是否需要附加的共享库。
3.为可执行程序和那些需要的共享库执行重定位。
4.调用共享库中提供的任何初始化函数并且安排共享库提供的
清除(cleanup)函数在共享库卸栽出进程空间的时候运行。
5.传控制给程序
6.为应用程序提供函数的迟延装定服务
7.为应用程序提供动态转载服务。

环境变量LD_PRELOAD设置共享库名或者用":"把文件名隔开。动态连接器在
任何那些请求的共享库之前把环境变量LD_PRELOAD的共享库装载到进程地址
空间去。例如:

# LD_PRELOAD=./mylibc.so myprog

这里./mylibc.so将第一时间map到程序myprog的空间。因为动态连接器在找
寻标号的时候总是使用第一次碰到的标号,所以我们可以使用LD_PRELOAD来
覆盖标准共享库中的函数。

我们可以这样:
#gcc -c -fPIC -O3 print.c
#gcc -shared print.o -o print.so.1.0
创建自己的共享连接库
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP