CreateIrrKlangDevice()导致未定义的引用(真正长的引用)
C++ IrrKlang sound error- CreateIrrKlangDevice() results in undefined refrence to (really long refrence)
最近,我下载了irklang声音库来与我的c++程序一起使用。为了测试它,我已经在Code::Block的编译器设置和我的项目构建设置中安装并链接了该库。然而,每当我尝试构建&运行以下代码:
#include <irrKlang.h>
using namespace std;
using namespace irrklang;
int main(){
ISoundEngine* engine = createIrrKlangDevice();
}
"Build Messages"选项卡抛出以下错误:
|Line 5|undefined reference to`_imp___ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_'|
下面是来自"Build Log"选项卡的错误:
64bit-1.5.0libWinx64-visualStudioirrKlang.lib"
objDebugmain.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/
我在谷歌上查过这个错误,当人们遇到同样的问题时,他们得到的所有解决方案要么太模糊,要么他们的错误报告是由不同的错误引起的。
这是我浏览过的一些页面:
http://www.ambiera.com/forum.php?t=939我看了不止这一个,主要是在同一个论坛上,但我最多只能发布两个链接,我决定更重要的是你可以告诉我如何链接库。
您正在尝试链接一个c++ DLL(或者更确切地说是DLL的导出库)这是用MS Visual Studio c++在你用GNU 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.0libWinx64-visualStudio
是一个暗示,它是唯一的与Windows 64位Visual Studio工具链兼容。
将64位irrKlang.dll
与您使用GNU工具链构建的64位程序链接将不得不获得irrKlang
源代码和重建dll与您的GNU工具链。我不相信源代码是公开的。否则您只能使用Visual Studio构建64位程序。
如果您满足于构建一个32位程序(它将在64位Windows上运行),那么你可以使用32位版本的irrKlang 1.5。它包含32位静态和动态库构建使用32位GCC和位于子文件夹win32-gcc
中,而不是Winx64-visualStudio
。
- 编译C++时未定义的引用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 对 Scalar ::Scalar() 的未定义引用
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 对复制 CTOR 和 CTOR 的未定义引用
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 右值引用未定义的行为
- 对"vtable for DigitalClock"的未定义引用 - 未定义对"DigitalClock::staticMetaObject"的引用 - Qt
- 函数类型到函数类型的引用:未定义的引用
- avcodec_alloc_context引用未定义,但ffmpeg链接顺序正确
- 从c++调用Fortran子程序,链接时引用未定义
- 枚举引用未定义,但位于包含的头文件中