百科狗-知识改变命运!
--

FreeBSD、Solaris、Linux、Unbutu、MacOS等操作系统有什么不同啊?

梵高1年前 (2023-12-05)阅读数 6#综合百科
文章标签操作系统系统

他们分三类系统:

unix类系统:freebsd、solaris

linux类系统:linux、ubuntu

苹果类系统macos

linux衍生于unix,macos是个独立的系统

Linux和FreeBSD在使用非系统自带的gcc时的区别

三种操作系统的基本类型及其特点

一、电脑操作系统有哪些类型

1、DOS——操作系统远古霸主

DOS似乎只有现在的老鸟有过接触,新学电脑的人对DOS只是一知半解。它曾经占领了个人电脑操作系统领域的大部分,全球绝大多数电脑上都能看到它的身影。由于DOS系统并不需要十分强劲的硬件系统来支持,所以从商业用户到家庭用户都能使用。虽然用现在的眼光看它不是出色的操作系统,但微软软件向下兼容的特点,决定了Windows出问题的时候,很多时候需要在DOS下才能得到解决,因此了解与学习DOS还是很有必要的。

2、Windows——操作系统当代大亨

从微软1985年推出Windows1.0以来,Windows系统经历了十多年风风雨雨。从最初运行在DOS下的Windows3.x,到现在风靡全球的Windows9x、Windows2000,Windows几乎代替了DOS曾经担当的位子,成为了新一带的操作系统大亨。其普及性也就不用小编多言了。

下面拿CentOS 5和FreeBSD 9.0做下比较:

CentOS 5 自带的gcc是gcc (GCC) 4.1.2,通过yum可以安装gcc44 (GCC) 4.4.4

FreeBSD 9.0 自带的gcc是gcc (GCC) 4.2.1,通过ports可以安装gcc 4.6 (目前是4.6.2)

用C++写一个非常简单的C++程序:

int main(){

return 0;

}

然后用g++编译:

# g++44 main.cpp -o main

然后用ldd查看,Linux下的输出结果为:

libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000336f000000)

libm.so.6 => /lib64/libm.so.6 (0x000000336cc00000)

libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000336e400000)

libc.so.6 => /lib64/libc.so.6 (0x000000336c400000)

/lib64/ld-linux-x86-64.so.2 (0x000000336c000000)

FreeBSD下的输出结果为:

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0×800849000)

libm.so.5 => /lib/libm.so.5 (0x800b59000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800d7a000)

libc.so.7 => /lib/libc.so.7 (0x800f87000)

其中有两行故意标红了。因为他们是来自于gcc。那么就有这么一个问题:不同版本的gcc,这两个库,一样吗?或者我这么问,gcc 4.4、gcc 4.6、gcc 4.2、gcc 4.1相比,他们的C++标准库(libstdc++.so)的接口一样吗? 实现一样吗?(此处指需要被编译的那部分,如非模板类)

来看看CentOS怎么做的:

CentOS 5的gcc44-c++这个包,只带了两个so。/usr/lib/gcc/x86_64-redhat-linux6E/4.4.4/32/libstdc++.so和/usr/lib/gcc/x86_64-redhat-linux6E/4.4.4/libstdc++.so。而这两个so竟然只是文本文件,内容大概是这样:

INPUT ( -lstdc++_nonshared /usr/lib64/libstdc++.so.6 )

也就是说,它会静态链接到/usr/lib/gcc/x86_64-redhat-linux6E/4.4.4/libstdc++_nonshared.a这个文件,并动态链接到/usr/lib64/libstdc++.so.6(这个文件由gcc 4.1提供)

所以,在CentOS 5中,用gcc 4.4编译出来的东西,运行环境不需要安装gcc 4.4 !

然后看FreeBSD怎么做的:

FreeBSD、Solaris、Linux、Unbutu、MacOS等操作系统有什么不同啊?

gcc 4.6的so,安装在/usr/local/lib/gcc46/目录下。如果是在64位环境下安装的,那么只有64位版本的,没有32位版本的。最关键的是,它确实是一个elf格式的so,而不是文本文件、软链接什么的。

如果在FreeBSD下这么编译一个文件:

# g++46 -o t test.cpp

那么它会错误的链接到4.2的so上

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0×800849000)

libm.so.5 => /lib/libm.so.5 (0x800b59000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800d7a000)

libc.so.7 => /lib/libc.so.7 (0x800f87000)

程序还能不能正常工作,那就看天命了。正确的做法是,在链接的时候加上-Wl,-rpath=/usr/local/lib/gcc46 。

现在如果只是为了让ports用gcc 4.6,那么直接在/etc/make.conf中加入“USE_GCC=4.6”即可.

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)