艰难的Linux开发!怎比Unix!难道Linux的稳定性是炒出来的?

发布于 2022-10-01 15:43:15 字数 1007 浏览 22 评论 0

为什么总会出现"sigmentation fault"和"command terminated"?

我正在将应用系统从Sco Openserver5.0.5移植到Redhat7.2上,遇到不可思议的问题,也许是我在Linux还是入门甚浅。

(1)在SCO上,makefile中编译命令如下例:

cc -o app app.o ...... -lx -lnsl_l ......

无论是Pentium、PII、PIII机器,编译出来的运行时系统都运行稳定健壮。

(2)在Redhat上,makefile中编译命令如下例:

gcc -o app app.o ...... -mlarge -O3 -march=pentium -lnsl .......

Pentium机器,运行时总会出现"segmentation fault"或"command terminated",然后退出。

出现这个问题的地方还不定,有时在这里,有时在那里。

奇怪的是,有时程序出错退出的地方,加一些printw、getch语句停顿一下,就能过去了,但在其他地方肯定有另一问题等在那里。

用gdb调试发现进程是收到一个SIGSEGV信号后退出的,有时在malloc过程中收到该信号,有时又在strcmp过程中收到。

在SCO上,程序运行的状态是可预料的,有错误就一定是人的错误,调试时甚至不用工具,只在程序中加些printf语句,定位错误,排除后同样的问题就不会再出现。

而在Redhat上,一切是那么不可预料,明明排除了一个问题,下一次排除其他问题后,在同一地方同样的问题还会再出现。

难道Linux的稳定性是炒出来的,根本名不副实?还是我没入门呢?

如果是后者,快请此中高手指点迷津。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

固执像三岁 2022-10-08 15:43:15

Linux 的稳定性是相对的,要是真的那么100%可靠,还会有人花钱去买SCO吗?
但最近几个版本 Linux 的稳定性越来越好了,所以 SCO 才想办法要让 Linux 也成为付钱的。这样SCO才会有的混。
你的编译过程要没错的话,你能不能保证那台Linux的机器没问题。因为我不懂编程,但要是内存有问题的话,可能也会有 Segmentation fault 吧。

橘寄 2022-10-08 15:43:15

你自己的程序选择用-O3编译,不合适自找不可预测的结果吗?呵呵。尤其如果你的gcc版本比较怪异。

苯莒 2022-10-08 15:43:15

移植本身就有比开发更困难的因素,更况且你都说你自己对linux并不了解,你指望linux和sco的兼容性好到什么地步呢?另外编译参数也很重要

清音悠歌 2022-10-08 15:43:15

问题我已经解决了,还是自己程序中指针导致的错,有时换一种写法就通过了,比如,原来用循环移动指针,内存出错,改用指针加法就通过了,其中原因还不清楚。

谢谢各位的热心回帖。

世界如花海般美丽 2022-10-08 15:43:15

gcc作编译时,最好不要加优化参数,尤其是优化过度时,会出现一些难以解释的问题

东风软 2022-10-08 15:43:15

-O2 还是可以用的,如果对自己的程序有信心,也可以用-O3。比如mysqld

予囚 2022-10-08 15:43:15

原帖由 "jerr" 发表:
问题我已经解决了,还是自己程序中指针导致的错,有时换一种写法就通过了,比如,原来用循环移动指针,内存出错,改用指针加法就通过了,其中原因还不清楚。

也许正是因为KERNEL的不同才导致的这样的问题

捎一片雪花 2022-10-08 15:43:15

这种情况绝大多数是你的程序写得有问题,不是OS的稳定性问题。从你这种思路来看,你确实对linux不太熟悉,对其他unix也不见得有多熟悉

仙女 2022-10-08 15:43:15

1)segment fault: 我想楼主可能是跨kernel和user space引用了。在kernel空间直接访问user 空间的数据,偶尔是可以的,但是这是错误的,是出现 segment fault可能的原因之一。
2)对于加入打印信息而使得程序正常运行。我想需要考虑printk, printf是否可能影响程序的时序,我遇到过一种情况,打印带回车符的printk就能够正常工作,后来发现这个printk相当于一个cache_writeback过程。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文