大家好:
我将多个.c和.h文件通过VC6.0建立了一个静态链接库mfcc.lib,然后又用VC建了个基于MFC的程序来链接它,
现在的问题是:
mfcc.lib中有的函数可以调用成功,但有的却不行,比如我调用写在mfcc.c(mfcc.c生成mfcc.lib中的一个源程序)
中的feature_extrac()函数
出现了以下的错误,我在调用的.cpp文件开头也加入了
extern "C"
{
 #include "mfcc.h"
}
Linking...
LIBCD.lib(dbgheap.obj) : error LNK2005: _malloc already defined in msvcrtd.lib(MSVCRTD.dll)
LIBCD.lib(dbgheap.obj) : error LNK2005: _free already defined in msvcrtd.lib(MSVCRTD.dll)
LIBCD.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.dll)
LIBCD.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCRTD.dll)
LIBCD.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj)
LIBCD.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)
LIBCD.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj)
LIBCD.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj)
LIBCD.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in msvcrtd.lib(MSVCRTD.dll)
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: __setmbcp already defined in LIBCD.lib(mbctype.obj)
LINK : warning LNK4098: defaultlib "msvcrtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4098: defaultlib "LIBCD" conflicts with use of other libs; use /NODEFAULTLIB:library
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
这是怎么回事呢,我对我的.c和.h文件单独建立工程运行都是对的,谢谢大家了.

解决方案 »

  1.   

    在你的c导出函数的头文件加上一个extern
    比如feature_extrac()声名为
    extern void feature_extrac();然后C++文件在引用c这个头文件的时候加上
    extern "C"
    {
    #include "mfcc.h".
    }
      

  2.   

    需要把工程属性->C\C++->Code Generation->Runtime library 调一致
      

  3.   

    我将feature_extrac()声名为
    extern void feature_extrac();
    但链接还是出现和原来一样的错误.
      

  4.   

    谢谢大家,我把
    把工程属性->C\C++->Code Generation->Runtime library 都调成debug multithreaded dll就好了.