外部库在Qt Creator中抛出未定义的参考错误

我在使用外部库/ SDK时遇到了一些问题。 我正在Ubuntu下使用Oculus Rift SDK使用Qt Creator。 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。 显然,这只是外部源代码访问方法有问题。

任何想法,我必须做出这个工作的构build过程有什么变化?

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

请参阅此答案以获取更多信息。