外部库在Qt Creator中抛出未定义的引用错误

时间:2014-01-13 16:04:02

标签: c++ linux qt qt-creator

使用外部库/ SDK时遇到一些问题。 我在Ubuntu下使用Qt Creator和Oculus Rift SDK。 Oculus Rift SDK由平台相关的lib文件和一些c ++源代码组成。请注意,我非常怀疑我的问题是以Oculus SDK或Xinerama为特定的任何方式。

我使用了向导并将SDK添加为外部库。这就是结果:

unix:!macx: LIBS += -L$$PWD/../OculusSDK/LibOVR/Lib/Linux/Release/x86_64/ -lovr
INCLUDEPATH += $$PWD/../OculusSDK/LibOVR/Include
DEPENDPATH += $$PWD/../OculusSDK/LibOVR/Include
unix:!macx: PRE_TARGETDEPS += $$PWD/../OculusSDK/LibOVR/Lib/Linux/Release/x86_64/libovr.a

现在我应该可以从SDK调用方法了。但是,这是我在编译时遇到的错误之一:

/home/me/OculusSDK/LibOVR/Lib/Linux/Release/x86_64/libovr.a(OVR_Linux_HMDDevice.o):-1: In function `OVR::Linux::HMDDeviceFactory::EnumerateDevices(OVR::DeviceFactory::EnumerateVisitor&)':
OVR_Linux_HMDDevice.cpp:-1: error: undefined reference to `XineramaIsActive'

我已经尝试将此行添加到我的.pro文件中,但没有任何更改:

unix:LIBS += -lXinerama

如果我包含与OVR_Linux_HMDDevice.cpp完全相同的头文件,

#include <X11/extensions/Xinerama.h>

我可以从我的代码中成功调用XineramaIsActive。显然,只是外部源代码在访问该方法时遇到了问题。

任何想法我必须对构建过程进行哪些更改才能使其正常工作?

1 个答案:

答案 0 :(得分:4)

链接顺序在这里很重要。您需要确保在 -lXinerama选项之后添加了选项。-lovr选项。当您在库.pro文件中添加库时,qmake应保留库的顺序。

有关详细信息,请参阅this answer