未定义对CoInitialize@4和CoUninitialize@0的引用

Undefined reference to CoInitialize@4 and CoUninitialize@0

提问人: 提问时间:11/22/2014 更新时间:11/22/2014 访问量:2937

问:

我已经构建并包含在项目中的 RtAudio 库,但是当我尝试构建项目本身时,出现错误:

RtAudio.cpp:-1: error: undefined reference to `CoInitialize@4'
RtAudio.cpp:-1: error: undefined reference to `CoUninitialize@0'
:-1: error: D:/Qt/Qt5.3.2/Tools/QtCreator/bin/teslib/../../../../../../lib/rtaudio-4.1.1//librtaudio.a(RtAudio.o): bad reloc address 0x17 in section `.text.unlikely'
collect2.exe:-1: error: error: ld returned 1 exit status

第三条错误消息看起来很可疑,这是什么意思?

“.text.unlikely”部分中0x17错误的 reloc 地址

我无法使用与 Qt 捆绑的 MinGW 构建库,所以我使用相同的主要版本 (4.8) 构建它,该库是否有可能由于使用不同的 GCC 次要版本构建而与 Qt 不兼容?

C++ Qt 静态库 未定义引用 RTaudio

评论


答:

3赞 Wayne Tanner 11/22/2014 #1

CoInitialize 和 CoUnitialize 在库 Ole32.lib 中定义。确保该库包含在链接器库列表中。

评论

0赞 11/22/2014
但这是为什么呢?我的项目没有引用这些函数,库引用了这些函数,并且库已经编译好了。为什么它们也需要包含在我的项目中?
0赞 11/22/2014
另外,我的系统上根本没有这样的文件。我有一个.再加上这个错误,导致了一连串的新错误。libole32.aundefined reference to
2赞 nobody 11/22/2014
显而易见的结论是 RtAudio 库将 COM 用于某些事情。您成功编译它的事实并不意味着您拥有将其实际链接到应用程序并使用它所需的所有依赖项。
0赞 11/22/2014
@AndrewMedico - 这个明显的结论对我一点帮助都没有。该库已经成功编译,将我系统上的 ole32 库添加到我的项目中无济于事,反而会极大地破坏它......
0赞 Wayne Tanner 11/22/2014
虽然该库已编译,但它未链接。它只引用了库中没有的所需函数。如果使用 nm 转储库的符号表,您将看到外部链接的符号。在尝试生成应用程序之前,不会发生最终链接,此时会发生链接错误。如果添加 libole32.a 导致一堆未定义的引用,那仅意味着它的依赖项尚未链接。在 Windows 上,COM/OLE 引入了很多其他内容。