使用外部库/ 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。显然,只是外部源代码在访问该方法时遇到了问题。
任何想法我必须对构建过程进行哪些更改才能使其正常工作?
答案 0 :(得分:4)
链接顺序在这里很重要。您需要确保在 -lXinerama
选项之后添加了选项。-lovr
选项。当您在库.pro
文件中添加库时,qmake应保留库的顺序。
有关详细信息,请参阅this answer。