gpt4 book ai didi

C++ IrrKlang 声音错误 - CreateIrrKlangDevice() 导致 undefined reference (非常长的引用)

转载 作者:行者123 更新时间:2023-11-28 06:09:12 25 4
gpt4 key购买 nike

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

#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

我浏览的不仅仅是这个,主要是在同一个论坛上,但我最多只能发布两个链接,我认为更重要的是你可以告诉我我是如何链接图书馆的。

最佳答案

您正在尝试链接 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 源代码并用您的代码重建 dllGNU 工具链。我不相信源代码是公开的。否则您只能使用 Visual Studio 构建 64 位程序。

如果您满足于构建 32 位程序(将在 64 位 Windows 上运行),那么您可以使用 irrKlang 1.5 的 32 位版本。它包含使用 32 位 GCC 和位于名为 win32-gcc 的子文件夹中,与 Winx64-visualStudio 相对。

关于C++ IrrKlang 声音错误 - CreateIrrKlangDevice() 导致 undefined reference (非常长的引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com