C ++ IrrKlang声音错误 - CreateIrrKlangDevice()导致未定义的引用(非常长的引用)

时间:2015-07-25 02:57:23

标签: c++ codeblocks irrklang

最近,我下载了Irrklang声音库,用于我的C ++程序。为了测试它,我已经在Code :: Block的编译器设置和我的项目构建设置中安装并链接了库。 但是,无论何时我尝试构建&运行以下代码:

#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_'|

以下是“构建日志”选项卡中的错误:

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

我查看的不仅仅是这个,主要是在同一个论坛上,但我最多只能发布两个链接,而且我认为更重要的是你可以告诉我如何链接库。

1 个答案:

答案 0 :(得分:1)

您正在尝试链接C ++ DLL(或者更确切地说是DLL的导出LIB) 在使用GNU C ++构建的程序中使用MS Visual Studio C ++构建。

你不能这样做有几个原因,最简单的原因是 MS和GCC编译器对C ++符号采用不同的名称修改约定。从而 您的编译器将irrklang::createIrrKlangDevice变为:

ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_

用于链接目的,但在您尝试链接的导出库中,它 导出为:

createIrrKlangDevice@irrklang@@YAPEAVISoundEngine@1@W4E_SOUND_OUTPUT_DRIVER@1@HPEBD1@Z

您安装的irrKlang软件包存储了此导出库 在irrKlang-64bit-1.5.0\lib\Winx64-visualStudio中提示它只是 兼容Windows 64位Visual Studio工具链。

将64位irrKlang.dll与使用GNU工具链构建的64位程序链接起来 必须获取irrKlang源代码并使用您的重建dll GNU工具链。我不相信源代码是公开的。除此以外 你只能使用Visual Studio构建一个64位程序。

如果您满足于构建32位程序(将在64位Windows上运行), 那么你可以使用32位版本的irrKlang 1.5。它包含 使用32位GCC和32位构建的32位静态和动态库构建 驻留在名为win32-gcc的子文件夹中,而不是Winx64-visualStudio

相关问题