![](/img/trans.png)
[英]Compiling libmodbus in Qt Creator on Windows throws undefined reference to '_imp_…' errors
[英]External library throws undefined reference errors in 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。 因此,显然,只有外部源代码才能访问该方法。
有什么想法我必须对构建过程进行哪些更改才能使其正常工作?
链接顺序在这里很重要。 您需要确保在-lXinerama
选项之后添加了-lovr
选项。 当您将库添加到.pro
文件中时,qmake应该保留它们的顺序。
有关更多信息,请参见此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.