Qt libao 未定义参考

Posted

技术标签:

【中文标题】Qt libao 未定义参考【英文标题】:Qt libao undefined reference 【发布时间】:2013-07-07 16:01:41 【问题描述】:

我正在尝试让 libao 库在 Qt 中运行。这是我目前所拥有的。

#include <ao/ao.h>

...

static int audio_driver;
static ao_device *audio_device;
static ao_sample_format audio_format;

...

int main(int argc, char *argv[])

    QApplication a(argc, argv);

    ao_initialize();
    audio_driver = ao_default_driver_id();

    MainWindow w;
    w.show();

    return a.exec();

它表示对 ao 库中任何内容的每个引用都是未定义的引用。

error: undefined reference to `ao_initialize'
error: undefined reference to `ao_default_driver_id'

以此类推一直到代码。

不管怎样,ao/ao.h 中的每个函数都在一个外部“C”中。

知道是什么原因造成的吗?

非常感谢。

【问题讨论】:

【参考方案1】:

你没有链接到ao动态库。

如果您使用 qmake 在.pro 文件中添加以下行

LIBS += -lao

如果库在非标准位置,也添加这些行

INCLUDEPATH += path/to/headers
LIBPATH += path/to/library

【讨论】:

非常感谢 - 这真的很有帮助。我试着做'libao'和'ao'。猜猜这就是为什么他们没有工作。 :P 作为旁注,假设我有 libvorbis。 -lvorbis 又来了?【参考方案2】:

如果你在 Linux 上,或者任何其他可以使用 pkg-config 的地方,那么应该通过将“link_pkgconfig”添加到 CONFIG 变量,然后将包名称添加到 PKGCONFIG 变量来完成。例如,如果您使用的是 libao 和 libvorbisfile:

CONFIG += link_pkgconfig
PKGCONFIG += ao vorbisfile

这将确保不仅使用正确的链接标志,而且还使用正确的 CFLAGS/CXXFLAGS,这也很重要。

【讨论】:

太棒了。 vorbisfile pkgconfig 回答了我的下一个问题。非常感谢!

以上是关于Qt libao 未定义参考的主要内容,如果未能解决你的问题,请参考以下文章

未定义参考编译MITK/Qt

为啥在将 liblas 链接到 Qt 后出现未定义的参考错误?

包含源中的 Qt 未定义参考

qt.webChannelTransport 在 QWebEngineView 中未定义

libmediainfo:qt5 项目未定义符号错误

Qt + cocoa:架构 x86_64 的未定义符号