LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1400|回复: 11

不同发行版本的LINUX系统编译出来的可执行文件能使用吗?

[复制链接]
发表于 2009-4-12 14:57:38 | 显示全部楼层 |阅读模式
例如:我在DEBIAN下编译了一个可执行程序,把其拷贝到Ubuntu 下能执行吗?
谢谢。
发表于 2009-4-12 15:34:15 | 显示全部楼层
如果有相关的库文件,是可以的。
或者说,大部分情况下是可以的。你为什么不在 ubuntu 下直接编译呢?
回复 支持 反对

使用道具 举报

发表于 2009-4-12 16:05:54 | 显示全部楼层
linux程序多采用动态链接库,如果库依赖符合,应该可以运行
像官方发布firefox是二进制程序打包.tar.bz2,只要解开就可以用,而且它会把很多.so也打包进去
googleearth也是二进制程序打包,也带了很多.so,又混用系统里的一些库,可能有冲突,在Debian lenny里要删掉它自带的libcrypto.so.0.9.8才能运行,然后又不能显示中文,要删掉它自带的libQt库文件,在系统里要安装上相关的QT4库才行
有的程序可能会用静态链接库方式编译,就不依赖库文件了,但很少有这么做的

如果ldd输出有某项是not found可能就缺少库文件了,一般程序只在标准库目录里找.so
像googleearth是会在它的安装目录里找.so的,有些not found的其实在googleearth目录里有,是可以用的
$ ldd /usr/local/bin/fbterm
        linux-gate.so.1 =>  (0xb7fb9000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7f7e000)
        libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb7f7a000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e8c000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7e66000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e59000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7cfe000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7c88000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7c73000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7c4d000)
        /lib/ld-linux.so.2 (0xb7fba000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7c34000)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-17 01:00:47 | 显示全部楼层
谢谢。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2009-4-17 19:19:55 | 显示全部楼层
这是“毒~要”问题,所谓毒*,就是。dll毒*,。so毒*,说白了就是(动态链接)库兼容性问题。

由于linux集市化开发,代码太大,开发者众多,知识良莠不齐。 导致。so毒*很毒!~~~

结论:
linux ,*unix 兼容性问题很严重,每个分支各有特色,又各不完全兼容。
永远也解决不了。比win差很多。你能举出例子一个二进制程序,通过复制,可以正常运行在
各版本linux上,且功能正常么?

现实生活中这种情况也太常见,各家包子店的猪肉包子味道都一样么?
麦当劳,全聚德各分店却致力于提供味道相同的食品。
就好像win,和linux *unix。他们就是理念不同。
回复 支持 反对

使用道具 举报

发表于 2009-4-17 22:50:30 | 显示全部楼层
怎么感觉是来踢场的。

Post by aleng;1975830
这是“毒~要”问题,所谓毒*,就是。dll毒*,。so毒*,说白了就是(动态链接)库兼容性问题。

由于linux集市化开发,代码太大,开发者众多,知识良莠不齐。 导致。so毒*很毒!~~~

结论:
linux ,*unix 兼容性问题很严重,每个分支各有特色,又各不完全兼容。
永远也解决不了。比win差很多。你能举出例子一个二进制程序,通过复制,可以正常运行在
各版本linux上,且功能正常么?

现实生活中这种情况也太常见,各家包子店的猪肉包子味道都一样么?
麦当劳,全聚德各分店却致力于提供味道相同的食品。
就好像win,和linux *unix。他们就是理念不同。
回复 支持 反对

使用道具 举报

发表于 2009-4-18 07:32:17 | 显示全部楼层
Post by whitelilis;1973224
如果有相关的库文件,是可以的。
或者说,大部分情况下是可以的。你为什么不在 ubuntu 下直接编译呢?


還要注意兩者系統 toolchain 是否兼容

gcc-3.3.x 以前跟 gcc-3.4.x 以後兩者 ABI 不兼容,也就是說,編譯出來的東西在對方系統下不一定能順利跑
回复 支持 反对

使用道具 举报

发表于 2009-4-18 09:43:58 | 显示全部楼层
静态编译
静态编译
静态编译
静态编译
回复 支持 反对

使用道具 举报

发表于 2009-4-18 10:16:59 | 显示全部楼层
如果可执行文件需要的动态库目标系统都有的话,应该是可以的。
回复 支持 反对

使用道具 举报

发表于 2009-4-18 11:47:28 | 显示全部楼层
注意glibc版本,用新版glibc编译的程序在旧版glibc上不一定能用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表