LinuxSir.cn,穿越时空的Linuxsir!

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

编译mplayer0.91出错

[复制链接]
发表于 2003-8-22 22:25:41 | 显示全部楼层 |阅读模式
mplayer/loader/下的ldt_keeper.c文件中函数Setup_LDT_Keeper中array的存储长度未知
原文如下:
ldt_keeper.c:In function 'Setup_LDT_Keeper':
ldt_keeper.c:168:storage size of 'array' isn't known
ldt_keeper.c:201:sizeof applied to an incomplete type
make[1]:***[ldt_keeper.o] Error 1
make[1];Leaving directory '/root/mplayer/MPlayer-0.91/loader'
make:***[loader/libloader.a] Error 2
由兄弟知道如何解决吗?
 楼主| 发表于 2003-8-22 22:42:38 | 显示全部楼层
程序代码见附件
部分代码如下:
ldt_fs_t* Setup_LDT_Keeper(void)
{
    struct modify_ldt_ldt_s array;
    int ret;
    ldt_fs_t* ldt_fs = (ldt_fs_t*) malloc(sizeof(ldt_fs_t));

    if (!ldt_fs)
        return NULL;

    ldt_fs->fd = open("/dev/zero", O_RDWR);
    if(ldt_fs->fd<0){
        perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: ");
        return NULL;
    }
    fs_seg=
    ldt_fs->fs_seg = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE,
                          ldt_fs->fd, 0);
    if (ldt_fs->fs_seg == (void*)-1)
    {
        perror("ERROR: Couldn't allocate memory for fs segment");
        close(ldt_fs->fd);
        free(ldt_fs);
        return NULL;
    }
    *(void**)((char*)ldt_fs->fs_seg+0x18) = ldt_fs->fs_seg;
    array.base_addr=(int)ldt_fs->fs_seg;
    array.entry_number=TEB_SEL_IDX;
    array.limit=array.base_addr+getpagesize()-1;
    array.seg_32bit=1;
    array.read_exec_only=0;
    array.seg_not_present=0;
    array.contents=MODIFY_LDT_CONTENTS_DATA;
    array.limit_in_pages=0;
#ifdef __linux__
    //ret=LDT_Modify(0x1, &array, sizeof(struct modify_ldt_ldt_s));
    ret=modify_ldt(0x1, &array, sizeof(struct modify_ldt_ldt_s));
    if(ret<0)
    {
        perror("install_fs");
        printf("Couldn't install fs segment, expect segfault\n");
    }
#endif /*linux*/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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