最近,我下载了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
我浏览的不止一个,主要是在同一个论坛上,但我最多只能发布两个链接,因此我决定,更重要的是,您可以告诉我如何链接库。
最佳答案
您正在尝试链接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
源代码,并使用GNU工具链。我不相信源代码是公开可用的。除此以外
您只能使用Visual Studio构建64位程序。
如果您有兴趣构建32位程序(将在64位Windows上运行),
那么您可以使用32位版本的irrKlang 1.5。它包含了
32位静态和动态库构建是使用32位GCC和
驻留在名为
win32-gcc
的子文件夹中,而不是Winx64-visualStudio
。关于c++ - C++ IrrKlang声音错误-CreateIrrKlangDevice()导致 undefined reference (真正的长引用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31622425/