新建了一个mfc工程,由于需要,在该工程下添加了3个项目,而且在原有项目的dependencies下把添加的那3个项目都已经勾选了,但是在编译的时候,还是出现了link出错。即使unload掉那3个添加进来的项目,编译时还是一样的错误,如果是建一个win32的工程,同样添加那3个项目,同样的操作,在编译的时候就不会出现这样的问题,这是为什么?

解决方案 »

  1.   

    link出错,
    错误如下:
    Linking...
    recDlg.obj : error LNK2001: unresolved external symbol "int __cdecl ad_close_play(struct ad_play_t *)" (?ad_close_play@@YAHPAUad_play_t@@@Z)
    recDlg.obj : error LNK2001: unresolved external symbol "int __cdecl ad_stop_play(struct ad_play_t *)" (?ad_stop_play@@YAHPAUad_play_t@@@Z)
    recDlg.obj : error LNK2001: unresolved external symbol "int __cdecl ad_write(struct ad_play_t *,short *,int)" (?ad_write@@YAHPAUad_play_t@@PAFH@Z)
    recDlg.obj : error LNK2001: unresolved external symbol "int __cdecl ad_start_play(struct ad_play_t *)" (?ad_start_play@@YAHPAUad_play_t@@@Z)
    recDlg.obj : error LNK2001: unresolved external symbol "struct ad_play_t * __cdecl ad_open_play_sps(int)" (?ad_open_play_sps@@YAPAUad_play_t@@H@Z)
    recDlg.obj : error LNK2001: unresolved external symbol "void __cdecl _E__die_error(char const *,...)" (?_E__die_error@@YAXPBDZZ)
    recDlg.obj : error LNK2001: unresolved external symbol "void __cdecl _E__pr_warn(char const *,...)" (?_E__pr_warn@@YAXPBDZZ)
    recDlg.obj : error LNK2001: unresolved external symbol "void __cdecl _E__pr_header(char const *,long,char const *)" (?_E__pr_header@@YAXPBDJ0@Z)
    Debug/rec.exe : fatal error LNK1120: 8 unresolved externals
    Error executing link.exe.
    但是我如果用win32建立一个工程的话,如果不添加那3个项目耶会出现这样的错误提示,只要在dependencies里把那3个项目勾选起来就不会有这样的问题了~
      

  2.   

    是不是你的另外三个工程是c工程而你新建的mfc工程是cpp工程c工程编译时的符号命名和cpp是不一样的在cpp文件中引用c文件中的函数时在函数声明前加上 extern "C"
      

  3.   

    或者在DEF文件中加入函数声明,这样比较好一点
      

  4.   

    在cpp文件中引用的函数声明是在一个.h的文件里是不是就在那个.h文件里的函数前面加extern "C"?本人菜鸟一只,如果问题太简单了,请别见笑
      

  5.   

    “或者在DEF文件中加入函数声明,这样比较好一点”呃……,DEF文件?是什么?我好像都没有找到—_—!!
      

  6.   

    改了.H文件里,加了extern “C”现在是这样的错误提示:
    recDlg.obj : error LNK2001: unresolved external symbol "int __cdecl ad_write(struct ad_play_t *,short *,int)" (?ad_write@@YAHPAUad_play_t@@PAFH@Z)
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutClose@4
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutOpen@24
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutGetErrorTextA@12
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutUnprepareHeader@12
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutWrite@12
    libsphinx2ad.lib(play_win32.obj) : error LNK2001: unresolved external symbol __imp__waveOutPrepareHeader@12
    Debug/rec.exe : fatal error LNK1120: 7 unresolved externals
    Error executing link.exe.这些又是什么呢?难道c++里的处理声音的函数跟c是不一样的?
    还是说添加进来的那些C项目所有的文件都必须用extern?
      

  7.   

    unresolved external symbol __imp__waveOutClose@4
    在这个里面是不是说waveOutClose找不到?但是这个在vc库里已经有定义了啊~~难道说c里的include库跟c++不一样?还是什么原因呢?
      

  8.   

    unresolved external symbol __imp__waveOutClose@4这里用的是__stdcall
    你看函数实现的工程是不是__stdcall改称一样的
      

  9.   

    __stdcall???什么意思?能不能说明白点~,本人菜鸟一只~,不是很懂的说
      

  10.   

    偶添加的3个项目都是用c写的程序添加了extern "C"以后就有上面的问题了,我不知道什么叫做__stdcall
      

  11.   

    __stdcall  //参数进站 的顺序~
      

  12.   

    __stdcall  //参数进站 的顺序~
      

  13.   

    怎么感觉很复杂~~—_—!!!c程序不是默认用__stdcall嘛?
      

  14.   

    怎么感觉很复杂~~—_—!!!c程序不是默认用__stdcall嘛?