Ошибка связывания Waveform API - PullRequest
       1

Ошибка связывания Waveform API

0 голосов
/ 22 августа 2011

Я получаю какую-то ошибку связывания с программой, использующей MS-s waveform 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, чтобы найти его правильно.Как только это было исправлено, я изменил опцию в настройках Linker-> Link Libraries на kernel32, как было рекомендовано, и теперь она работает без проблем.

Спасибо всем, кто помог мне с этим !!!^ _ ^

Ответы [ 3 ]

1 голос
/ 11 октября 2012

Я получаю те же ошибки, когда помещаю библиотеку в system32 и пытаюсь связать ее с LIBS += L$$quote(C:/Windows/System32).

Когда я помещаю его в обычный каталог и устанавливаю относительный путь к нему, все работает нормально.

0 голосов
/ 12 сентября 2011

У меня была такая же проблема, и через некоторое время я понял, как это сделать, проблема зависит от компоновщика, он пытается связать некоторые функции Windows в исполняемый файл, и компилятор не может их найти, вот какЯ решил это:

  1. Установите Windows 7 SDK, вы можете скачать его отсюда: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138
  2. Добавить путь к библиотекам поиска в CodeBlocks Project / Build Options (выберите проект, если вы хотите связать его со всеми имеющимися у вас конфигурациями) / Search Directories / Linker / Add и разместите путь к библиотеке SDK, который должен быть по адресу: C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \Lib
  3. Добавьте ссылки на библиотеки Windows в настройках компоновщика: «Проект» / «Параметры сборки» / «Настройки компоновщика» / «Добавить» (в библиотеках ссылок) и добавьте kernel32, user32 и gdi32 (эту последнюю следует добавить, если выиспользуется Windows GUI).

Вот и все ... теперь пересоберите ваш проект, и он должен работать без нареканий.

Примечание: вам нужно добавить этонастройки проекта exe, если вы создаете библиотеки, при попытке связать файл exe будет показана ошибка.

0 голосов
/ 22 августа 2011

Похоже, вы не связываетесь с Kernel32.lib Проверьте свойства вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...