当前位置:  技术问答>linux和unix

不知道问题出在哪了,求解答!

    来源: 互联网  发布时间:2016-09-14

    本文导语:  使用vxworks底下的gcc编译一个工程,又出了问题,以下先列出报错的内容: In file included from C:/Tornado2.2/target/h/taskLib.h:144,                  from C:/PROGRA~1/MATLAB/R2010a/rtw/c/src/ext_mode/common/ext_work.h:23,         ...

使用vxworks底下的gcc编译一个工程,又出了问题,以下先列出报错的内容:
In file included from C:/Tornado2.2/target/h/taskLib.h:144,
                 from C:/PROGRA~1/MATLAB/R2010a/rtw/c/src/ext_mode/common/ext_work.h:23,
                 from test2.h:28,
                 from test2_data.c:18:
C:/Tornado2.2/target/h/stdlib.h:124: conflicting types for `ExtModeCalloc'
C:/PROGRA~1/MATLAB/R2010a/rtw/c/src/ext_mode/common/mem_mgr.h:25: previous declaration of `ExtModeCalloc'
C:/Tornado2.2/target/h/stdlib.h:128: conflicting types for `ExtModeMalloc'
C:/PROGRA~1/MATLAB/R2010a/rtw/c/src/ext_mode/common/mem_mgr.h:23: previous declaration of `ExtModeMalloc'
make: *** [test2_data.o] Error 0x1 

其中
taskLib.h的144行为 #include "stdlib.h"
stdlib.h的124行为extern void *calloc (size_t __nelem, size_t __size);
          128行为extern void *malloc (size_t __size);
mem_mgr.h的内容摘要如下
#ifndef __MEM_MGR__
#define __MEM_MGR__

struct MemBufHdr {
    struct MemBufHdr *memBufNext;
    struct MemBufHdr *memBufPrev;
    char   *MemBuf;
    int    size;
};

typedef struct MemBufHdr MemBufHdr;

extern void ExtModeFree(void *mem);

extern void *ExtModeMalloc(uint32_T size);

extern void *ExtModeCalloc(uint32_T number, uint32_T size);

#endif /* __MEM_MGR__ */

ExtModeMalloc,ExtModeCalloc两个个函数在mem_mgr.c文件中定义如下
PUBLIC void *ExtModeCalloc(uint32_T number, uint32_T size)
{
    uint32_T numBytes = number*size;
    void     *mem     = ExtModeMalloc(numBytes);

    if (mem == NULL) goto EXIT_POINT;

    memset(mem, 0, numBytes);

  EXIT_POINT:
    return mem;
}

PUBLIC void *ExtModeMalloc(uint32_T size)
{
    boolean_T keepTrying = false;

    MemBufHdr *LocalMemBuf; /* Requested buffer (NULL if none available). */
    MemBufHdr *FreeMemBuf;  /* First free buffer big enough for request. */

    /*
     * Must allocate enough space for the requested number of bytes plus the
     * size of the memory buffer header.
     */
    int sizeToAlloc = size + sizeof(MemBufHdr);

    while (!keepTrying) {
        keepTrying = true;

        LocalMemBuf = NULL;
        FreeMemBuf  = NULL;

        /* Initialize the free queue. */
        if (FreeQueue == NULL) initFreeQueue();

        /* Find first free packet big enough for our request. */
        FreeMemBuf = findFirstFreeMemBuf(sizeToAlloc);

        if (FreeMemBuf == NULL) {
            /* We couldn't find a free buffer.  Run garbage collection to merge
               free buffers together and try again. */
            sortQueue(FreeQueue);

            FreeMemBuf = findFirstFreeMemBuf(sizeToAlloc);
        }

        /* No free buffers are available which satisfy the request. */
        if (FreeMemBuf == NULL) goto EXIT_POINT;

        /*
         * Found a free buffer with enough space.  Carve out the exact buffer size
         * needed from the end of the free buffer.
         */
        LocalMemBuf = (MemBufHdr *)(FreeMemBuf->MemBuf +
                                    FreeMemBuf->size -
                                    sizeToAlloc);

        /*
         * The pointer to the free memory must be longword aligned.  If it
         * is not, adjust the size to allocate and try again.
         */
        {
            int alignBytes = (int)LocalMemBuf % 4;
            if (alignBytes) {
                sizeToAlloc += (4-alignBytes);
                keepTrying = false;
            }
        }
    }

    /* Set up the new packet's info. */
    LocalMemBuf->memBufPrev = NULL;
    LocalMemBuf->memBufNext = NULL;
    LocalMemBuf->MemBuf     = (char *)LocalMemBuf + sizeof(MemBufHdr);
    LocalMemBuf->size       = size;

    /* Insert the newly created buffer into the InUseQueue. */
    inUseQueueInsert(LocalMemBuf);

    /* Update the free packet's size to reflect giving up a piece. */
    FreeMemBuf->size -= sizeToAlloc;

  EXIT_POINT:
    if (LocalMemBuf) {
#ifdef VERBOSE
        numBytesAllocated += sizeToAlloc;
        printf("nBytes allocated: %d out of %d.n", numBytesAllocated, EXTMODE_STATIC_SIZE);
#endif
        return LocalMemBuf->MemBuf;
    }

#ifdef VERBOSE
    printf("nBytes allocated: %d out of %d.", numBytesAllocated+sizeToAlloc, EXTMODE_STATIC_SIZE);
    printf("nMust increase size of static allocation!n");
#endif
    return NULL;
}
奇怪的是这两个函数并非是类的成员函数,为什么加上了PUBLIC?,且这两个函数的定义中(甚至整个mem_mgr.c文件)并未包含calloc和 malloc,虽然mem_mgr.c包含了stdlib.h,另外从makefile中可以看出mem_mgr.c比test2_data.c先编译 


|
看着有点晕……
这个都是函数声明冲突,和函数定义没有关系。所以楼主不用看任何.c文件,看头文件就可以了。
可以看看预处理的结果:把make的时候编译test2_data.c的gcc命令行复制出来,加个-E参数,然后在输出的结果里面找找ExtModeCalloc看看到底声明成了什么样子

|
这就不明白了。
难道前面的某些头文件里面有这种东西?  #define calloc ExtModeCalloc

    
 
 

您可能感兴趣的文章:

  • [菜鸟问题]我下载了一个xmms.tar.gz,解压缩后不知道该如何使用了!! 盼高手解答!!
  • 有一个算法的makefile 不知道什么意思 求解答
  • red hat linux 9.0安装问题,不知道有人知道吗?
  • UI小问题,可我就是不知道怎么实现,或许您知道……
  • 不知道这个问题是否有人知道!
  • 我的一个问题,我不知道,你知道!
  • 【NFS问题暴高分求解】如何知道Server端有哪些目录共享?
  • 超级菜的问题,不知道网卡在那里安装。
  • 关于X库安装问题:我怎么查看我已经安装了哪些X库,并且哪些知道安装的版本号?
  • 不知道这个问题放在这里合不合适
  • 机子启动后出现BIOS怪问题!知道的告诉!
  • 很受伤,我不知道一个基本的问题,Help!
  • 一个很菜的问题!但我却不知道!
  • 一个我不知道能不能实现的问题
  • 超级郁闷,我的问题很简单,但就是不知道
  • 各位,有没有人知道光电鼠在linux下使用是否有啥问题?
  • 我的sprintf有错误,不知道什么问题。
  • 留下这样一条信息:user signal 1 ,有高手知道这一般是什么出问题吗?
  • 急!!!关于菜单的问题:怎样知道某一菜单项的在该菜单中的位置序号?
  • 初级问题,JAVA编译EJB不成功,不知道是不是path之类的问题,错误如下
  • 有关文件显示的问题,不知道如何下手!
  • 比较高级的问题哦,就是不知道可不可能?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何知道在linux下面如何知道mysql服务是用哪个端口啊
  • 那位知道怎样能知道 linux C/C++文件它所依赖的文件
  • 哪位大哥知道?我怎样知道LINUX redhat 7.2下声音设备由哪个应用程序占用?
  • 我做了个简单的留言板,不知道如何知道留言者的ip地址?
  • 只知道一个命令, 不知道其进程,问如何停止它?
  • 知道进程的ID,有什么函数知道这个进程还活不活?
  • 我插入USB设备,知道是1-1:1.0下面,如何知道ttyUSB?
  • 我在rh8下装了wine,可是我不知道装到哪里了,那位知道默认路径?
  • 请问如何在不知道对方IP,仅知道MAC地址的情况下和对方通信呢?
  • 已知一个进程的PID,但不知道这个进程是否停止,如何能知道系统中是否有相应的进程在运行。
  • 在不知道表结构的前提下,怎样把该表的一条记录打印出来?(即不知道各字段类型时,用哪个方法?)
  • SUN OS5.8怎么没有make ,我想装APACHE2.0不知道怎么下手,原来的APACHE1.3有不知道怎么卸载
  • 我做了个简单的留言板,不知道如何知道留言者的ip地址? iis7站长之家
  • 可信计算你知道嘛?红旗的可信计算你知道嘛?
  • 我装了jbuilder5,知道sn,但没有注册,每次启动都要跳出个jbuilder licence,要你注册,烦得很,那位大虾知道注册码,千万告诉小弟我,谢了
  • 我现在只有debian kernel 2.6,我把disc1的iso格式释放到了我的硬盘上面,我不知道里面有什么软件,也不知道怎样安装这些软件,莫展一筹
  • 一JSP网站,统一指定一个errorPage页面,统一处理异常,在指定的errorPage页面中,我想知道具体是哪个页面出错的,即想知道出错页面的具
  • 用JAVA过行无线网络编程,我现在只知道要用到J2ME,可其它就都不知道了,可不可以介绍一下
  • 菜鸟在c盘装了win2000,想在剩下的空间装Red Hat Enterprise Linux 3,在创建linux分区的时候,不知道都创建什么分区??我知道要创建一个
  • 想知道该如何设置才能使 netterm 进行自动登录 ?我查了资料,但无果。 有人给我答案:{不要输入用户名和密码的那种功能?选择地址簿-〉选择登录巨集文件(我用的是中文版,不知道是谁翻得这么烂)。选一个类似的文件改改就是了。}我还是不明白如何操作 ?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3