2015-07-25 5 views
0

Недавно я загрузил звуковую библиотеку Irrklang для использования с моими программами на C++. Чтобы проверить это, я установил и связал библиотеку в настройках компилятора Code :: Block и в настройках сборки проектов. Однако всякий раз, когда я пытаюсь построить & запустить следующий код:C++ Ошибка звука IrrKlang-CreateIrrKlangDevice() приводит к неопределенному refrence к (действительно длинному refrence)

#include <irrKlang.h> 
using namespace std; 
using namespace irrklang; 
int main(){ 
    ISoundEngine* engine = createIrrKlangDevice(); 
} 

«Построить сообщения» Вкладка выдает следующее сообщение об ошибке:

|Line 5|undefined reference to`_imp___ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_'| 

А вот ошибку на вкладке «Build Log» :

64bit-1.5.0\lib\Winx64-visualStudio\irrKlang.lib" 
obj\Debug\main.o: In function `main': 
C:/Users/Johnny/Desktop/Python/Learner/main.cpp:5: undefined reference to _imp___ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_' 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

Должен вам сказать, это моя первая загрузка и использование библиотеки с C++. Я использовал этот учебник: http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

Я искал эту ошибку в Google, и, хотя люди с одинаковой проблемой приходят, все решения, которые они получили, слишком расплывчаты или их отчет об ошибках был вызван другой ошибкой ,

Вот некоторые страницы, которые я просмотрел:

http://www.ambiera.com/forum.php?t=939

Я просмотрел больше, чем просто этот, в основном, на том же форуме, но я могу отправить только максимум двух звеньев, и я решил, что было более важно, чтобы вы могли рассказать, как я связал библиотеку.

+0

Похоже, вы не добавили 'import library' в свой проект. Компонент ищет эту функцию, которую вы вызываете в 'main', но не можете ее найти. Префикс '_imp' указывает, что функция (заглушка) находится в библиотеке импорта (которую вы должны были получить и добавить в свой проект). – PaulMcKenzie

+0

'import library'? Что это? @PaulMcKenzie –

+0

Ваша программа вызывает функцию. Где находится эта функция? Об этом жалуется компоновщик - он не может его найти. Эта функция находится в файле библиотеки импорта (.LIB), который должен был поставляться с вашей звуковой библиотекой. Затем вам нужно добавить этот файл в свой проект, чтобы компоновщик знал, где найти эту функцию. И BTW, вам нужно познакомиться с импортом (и статическими библиотеками), если вы собираетесь использовать сторонние DLL и модули. На самом деле ссылка на ваш URL указывает на это: '5) Сообщите компоновщику, какие статические или импортировать файлы библиотеки для ссылки.« – PaulMcKenzie

ответ

1

Вы пытаетесь связать C++ DLL (или, скорее, экспортировать LIB DLL) , который был создан с MS Visual Studio C++ в программе, которую вы создаете с помощью GNU C++.

Вы не можете сделать это по нескольким причинам, самым простым из которых является то, что компиляторы MS и GCC используют разные соглашения об именах для символов C++. Таким образом ваш компилятор искалечил irrklang::createIrrKlangDevice как:

ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_ 

для целей сцепления, но в библиотеке экспорта вы пытаетесь связать, он экспортируется как:

[email protected]@@[email protected]@[email protected]@[email protected] 

Тот факт, что пакет irrKlang вы установили магазины в эту библиотеку экспорта. в irrKlang-64bit-1.5.0\lib\Winx64-visualStudio - это подсказка, что это только , совместимый с Windows-битной Visual Studio toolchain.

Чтобы связать 64-бит irrKlang.dll с 64-битной программой, что вы строите с инструментарием, GNU вы имели бы получить исходный код irrKlang и восстановить DLL с вашей GNU набора инструментов. Я не считаю, что исходный код является общедоступным. В противном случае вы можете создавать 64-битную программу только с Visual Studio.

Если вы хотите создать 32-разрядную программу (которая будет работать на 64-разрядной Windows), то , то вы можете использовать 32-разрядную версию irrKlang 1.5. Он содержит 32-битные статические и динамические библиотеки, которые были построены с 32-разрядным GCC и находятся в подпапках под названием win32-gcc, в отличие от Winx64-visualStudio.