免费注册 查看新帖 |

Chinaunix

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

裁剪过的Linux系统pthread程序的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-30 20:08 |只看该作者 |倒序浏览
各位路过的经过的帮忙指点一下。

目的是想在pxe环境下运行的一个pthread的程序。运行后收到SIGSEGV 信号。
这个程序pxeagent 在其他linux机器上可以运行起来。
strace了一下了一下这个程序 如下图。
重新编了一个测试程序,不链接pthread库的时候正常,链接pthread库后就会接受到SIGSEGV信号。问题出在什么地方?
多谢各位!
ps:图在附件中,论坛不能直接贴图了吗?

q1.JPG (82.32 KB, 下载次数: 35)

图片1

图片1

q2.JPG (75.58 KB, 下载次数: 34)

图片2

图片2

论坛徽章:
0
2 [报告]
发表于 2008-10-30 21:09 |只看该作者
SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:

1.buffer overflow --- usually caused by a pointer reference out of range.

2.stack overflow --- please keep in mind that the default stack size is 8192K.

3.illegal file access --- file operations are forbidden on our judge system.


所以你先查一下内存槽做是不是正确吧

论坛徽章:
0
3 [报告]
发表于 2008-10-31 08:44 |只看该作者
原帖由 tassard 于 2008-10-30 21:09 发表
SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:

1.buffer overflow --- usually caused by a pointer reference out of range.

2.stack overflow --- please keep ...

-------------------------------------------------------------
回楼上的兄弟:
   即使写一个很简单的程序比如


int main(void)
{
return 0;
}

链接上pthread库,放到这个环境下执行就会出现以上提示。
所以我觉得不是我程序的内存操作的问题。
ps:把它编译成static 后可以执行了。
明白的兄弟指点一下。

论坛徽章:
0
4 [报告]
发表于 2008-10-31 10:53 |只看该作者
是你裁减的linux中 线程库不匹配吧。你把编译平台的线程库拷过来试试。ldd 一下你的执行文件看看

论坛徽章:
0
5 [报告]
发表于 2008-10-31 11:14 |只看该作者
原帖由 cccccc 于 2008-10-31 10:53 发表
是你裁减的linux中 线程库不匹配吧。你把编译平台的线程库拷过来试试。ldd 一下你的执行文件看看




---------------------------------------
昨天我记得试过了。
顺带说下: 是RHEL5.1的系统上搞过来的,所需要的库文件都存在在相应的目录下了。
                glibc-2.5
                2.6.18-53.el5
谢谢楼上的兄弟了,我再重新在RH5.1上编译一下试试。

论坛徽章:
0
6 [报告]
发表于 2008-10-31 11:55 |只看该作者
刚刚仔细看了下,版本是不大一样。
一个是RHEL5.0 另外一个是RHEL5.1.
我再测试一下。
多谢楼上的几位。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2008-10-31 12:20 |只看该作者
我曾经在本坛发表过一个 cpwithso,我很满意它。

论坛徽章:
0
8 [报告]
发表于 2008-10-31 13:48 |只看该作者
原帖由 flw 于 2008-10-31 12:20 发表
我曾经在本坛发表过一个 cpwithso,我很满意它。

找到了
贴一下到这里吧。方便查阅。
ps:copy so文件的确工作量挺大,使用脚本可以省很多劲。
--------------------------------------版权所有 FLW版----------------------------
原帖地址
http://linux.chinaunix.net/bbs/v ... 72894&page=1###


#!/usr/bin/perl

###############################################################################

# 程序功能和使用方法讲解

# 我们定制自己的 linux 系统的时候,一般情况都要在宿主操作系统上建一个目录,然后

# 把目标磁盘 mount 到这个目录,或者直接把这个目录作为自己的 linux 系统的 initrd

# 文件系统,然后往上面复制想要的东西。但是在复制应用程序的时候,需要一起复制应

# 用程序所依赖的 .so 文件,而且这些 .so 文件大多数又都是一些链接,目录也各不相

# 同,所以甚是头痛。本程序就是做这个用处的。


# 使用例子:

# cpwithso /bin/ls /mnt /usr/bin

# 这句话的意思是说,把 /bin/ls 这个程序复制到 /mnt 里的一个子目录中去。而且它

# 在新系统上的位置是 /usr/bin。复制的时候如果碰到相关的 .so 以及链接,都会一起

# 放到 /mnt 下相应的目录。链接也会一并建好。

#

# 作者: flw   20005.08

###############################################################################


use strict;
use warnings;
use File::Copy;
use File::Basename;

our @ARGV;

if ( scalar @ARGV < 3 ) {
    print "Usage: $0 <src_file> <prefix/mount-point> <dest_path>\n\n",
          "Example: $0 /bin/ls /mnt /usr/bin\n",
          "         It will be copy /bin/ls from current root-fs to /mnt/usr/bin,\n",
          "         and can't forget it's .so files.\n\n";
    exit(-1);
}

my $srcFile = shift;
our $mountPoint = shift;
our $destPath = shift;

chomp( our $pwd = `pwd` );

our @needCopyFiles = ();
push @needCopyFiles, [ 'file', $srcFile, $destPath ];

my @lines = `/usr/bin/ldd $srcFile`;

foreach my $line (@lines){
    if ( $line =~ /(\S+) \(0x[0-9a-fA-F]+\)/ ) {
        &TakeSO( $1 );
    }
}

foreach my $file ( @needCopyFiles ){
    my $cmd;
    if ( $file->[0] ne 'link' ){
        unless ( -d ( $mountPoint . $file->[2] ) ){
            $cmd = "mkdir -p $mountPoint" . $file->[2];                                    `$cmd`;
            print $cmd, "\n";
        }
        $cmd = "cp " . $file->[1] . " $mountPoint" . $file->[2];                           `$cmd`;
        print $cmd, "\n";
    }else{
        unless ( -d ( $mountPoint . dirname($file->[2]) ) ){
            $cmd = "mkdir -p $mountPoint" . dirname($file->[2]);                           `$cmd`;
            print $cmd, "\n";
        }
        $cmd = "cd $mountPoint" . dirname($file->[2])
                 .  "; ln -f -s " . $file->[1] . " " . basename($file->[2]);               `$cmd`;
        print $cmd, "\n";
    }
}

sub TakeSO{
    my $fileName = shift;

    if ( $fileName !~ m{^/} ){
        $fileName = $pwd . $fileName;
    }

    unless ( -e $fileName && -r $fileName ) {
        print STDERR "Error! $fileName not exists or can't read it.\n";
        return undef;
    }

    if ( -l $fileName ){
        my $fileinfo = `/bin/ls -l $fileName`;
        unless ( $fileinfo =~ /(\S+) -> (\S+)/ ){
            print "Oddness! ls -l $fileName output:\n$fileinfo";
            return undef;
        }
        if ( ! defined &TakeSO( dirname($1) . "/" . $2 ) ) {
            return undef;
        }
        push( @needCopyFiles, [ 'link', $2, $fileName ] );
        return $fileName;
    }
    elsif ( -f $fileName ){
        push( @needCopyFiles, [ 'file', $fileName, dirname($fileName) ] );
        return $fileName;
    }
    else{
        print STDERR "Error! don't know the type of $fileName.\n";
        return undef;
    }
}


[ 本帖最后由 amoyppa 于 2008-10-31 13:50 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-10-31 14:42 |只看该作者
搞好了。
果然是版本的问题呀。
中间间隔时间太长了,忘记了第一个版本的kernel是5.0的,后来copy的库文件是5.1的
感谢楼上的几位!

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
10 [报告]
发表于 2008-10-31 15:50 |只看该作者

回复 #9 amoyppa 的帖子

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP