Waveform API链接错误

时间:2011-08-22 08:54:43

标签: c windows

我在使用MS-s波形API的程序中遇到某种链接错误。我正在使用的代码可以在这里找到:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId=3 这是页面上“打开声音设备”标题下的第一个代码。我没有得到代码的任何错误,但我的链接器抱怨非常持久。输出如下:

d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\crt2.o:crt1.c|| undefined reference to `SetUnhandledExceptionFilter@4'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\crt2.o:crt1.c|| undefined reference to `ExitProcess@4'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\crtbegin.o:cygming-crtbegin.c|| undefined reference to `GetModuleHandleA@4'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\crtbegin.o:cygming-crtbegin.c|| undefined reference to `GetProcAddress@8'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(pseudo-reloc.o):pseudo-reloc.c|| undefined reference to `VirtualQuery@12'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(pseudo-reloc.o):pseudo-reloc.c|| undefined reference to `VirtualProtect@16'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(pseudo-reloc.o):pseudo-reloc.c|| undefined reference to `VirtualProtect@16'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\libgcc.a(cygming-shared-data.o)||In function `cmshared_get_ptr_from_atom':|
c:\crossdev\b4.4.1-tdm-1\build-sjlj\mingw32\libgcc\..\..\..\..\gcc-4.4.1\libgcc\..\gcc\config\i386\cygming-shared-data.c|91|undefined reference to `GetAtomNameA@12'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\libgcc.a(cygming-shared-data.o)||In function `_cmshared_create_or_grab':|
c:\crossdev\b4.4.1-tdm-1\build-sjlj\mingw32\libgcc\..\..\..\..\gcc-4.4.1\libgcc\..\gcc\config\i386\cygming-shared-data.c|140|undefined reference to `FindAtomA@4'|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\libgcc.a(cygming-shared-data.o)||In function `cmshared_add_ptr_as_atom':|
c:\crossdev\b4.4.1-tdm-1\build-sjlj\mingw32\libgcc\..\..\..\..\gcc-4.4.1\libgcc\..\gcc\config\i386\cygming-shared-data.c|118|undefined reference to `AddAtomA@4'|
||=== Build finished: 10 errors, 0 warnings ===|

如果需要,我也可以在这里粘贴构建日志。有人能让我知道我需要做些什么来解决这个问题吗?或者甚至更好,如何自己排除故障,以便我可以自己修复这样的未来问题?

[编辑]:好的,所以我设法解决了这个问题。在Project-> Build Options-> Linker Settings-> Link Libraries中玩游戏时,我注意到如果我添加类似kernel32.lib的内容,我会从ld收到错误,说“找不到-lkernel32.lib”。所以我四处搜索,直到找到了我需要的库,然后我添加了绝对路径,现在我的项目编译完美无缺! :D然而,这有点奇怪,因为我添加了我的库搜索路径,它似乎没有帮助。所以我再次讨论它为什么它似乎没有工作,似乎必须在路径名称中添加一个尾部反斜杠,就像这些库位于“C:\ SDK \ Lib \”中一样为Code :: BLocks添加尾部斜杠以正确搜索它。修复后,我将链接器设置 - >链接库中的选项更改为内核32,现在它可以顺利运行。

感谢所有帮助过我的人! ^ _ ^

3 个答案:

答案 0 :(得分:1)

当我将库放入system32并尝试使用LIBS += L$$quote(C:/Windows/System32)链接到它时,我遇到了同样的错误。

当我将它放入普通目录并设置相对路径时,一切正常。

答案 1 :(得分:0)

看起来您没有使用Kernel32.lib进行链接检查您的项目属性。

答案 2 :(得分:0)

我遇到了同样的问题,经过一段时间我想出了怎么做,问题依赖于链接器,它试图将一些windows函数链接到exe文件,而编译器找不到那些,这是怎么回事我解决了这个问题:

  1. 安装Windows 7 SDK,您可以从此处下载:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138
  2. 将库路径添加到CodeBlocks上的搜索库 项目/构建选项(如果要将项目链接到所有配置,请选择项目)/搜索目录/链接器/添加并放置SDK库路径,该路径应位于:C:\ Program Files \ Microsoft SDKs \ Windows \ V7.1 \库
  3. 在链接器设置上添加对windows库的引用: 项目/构建选项/链接器设置/添加(在链接库中)并添加kernel32,user32和gdi32(如果您使用的是windows gui,则应添加最后一个)。
  4. 就是这样......现在重建你的项目,它应该完美无缺。

    注意:您需要将此设置添加到exe项目中,如果您正在创建库,则在尝试链接exe文件时将显示错误。