我正在QT Creator中创建一个OpenGL项目,并希望稍后导入GLFW和其他可能的库。
我编译并导入了GLFW并且能够通过它导入它
#include <GLFW/glfw3.h>
Qt Creator甚至可以自动填充glfw方法。但是,当我试图调用其中一个时(例如glfwInit();
),编译器抛出了以下错误:
Undefined symbols for architecture x86_64:
"_CFArrayAppendValue", referenced from:
_addJoystickElement in libglfw3.a(iokit_joystick.m.o)
"_CFArrayApplyFunction", referenced from:
__glfwInitJoysticks in libglfw3.a(iokit_joystick.m.o)
_addJoystickElement in libglfw3.a(iokit_joystick.m.o)
"_CFArrayCreateMutable", referenced from:
...等
我假设它无法找到这些方法的实现。
我通过以下程序导入了GLFW:
1。我用CMake构建了一个Unix脚本。
2。我在生成的makefile上的终端中运行了“make”。这创建了一个名为“libglfw3.a”的文件。我通过QT将库导入到项目中,将库设置为libglfw3.a并将路径包含为“mypath / include /”(此文件夹包含另一个名为GLFW的文件夹,其中包含glfw3.h)。
QT Creator将以下内容输入QT项目文件。
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/glfw-3.1.1/src/release/ -lglfw3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/glfw-3.1.1/src/debug/ -lglfw3
else:unix: LIBS += -L$$PWD/glfw-3.1.1/src/ -lglfw3
INCLUDEPATH += $$PWD/glfw-3.1.1/include
DEPENDPATH += $$PWD/glfw-3.1.1/include
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/glfw-3.1.1/src/release/libglfw3.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/glfw-3.1.1/src/debug/libglfw3.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/glfw-3.1.1/src/release/glfw3.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/glfw-3.1.1/src/debug/glfw3.lib
else:unix: PRE_TARGETDEPS += $$PWD/glfw-3.1.1/src/libglfw3.a
非常感谢帮助。我花了至少10个小时试图弄清楚如何将GL库导入QT Creator,但我能找到的只是针对XCode,Visual Studio等的CMake教程。
我最好只修改QT .pro文件,因为我没有CMake的经验,但如果没有其他选择,那就没关系。
我正在使用Mac 10.10.15上的QT创建器进行开发。
答案 0 :(得分:0)
如果有人好奇,我想出来了。
我按照此处的程序:Compiling with GLFW3, linker errors 'undefined reference'
我起初并不认为这是相关的,因为它特别指的是在XCode上构建,但事实证明你必须使用QT Creator做同样的事情。 右键单击项目,导入库 - &gt;系统/图书馆/框架 - &gt;并导入Cocoa,CoreVideo和IOKit。
我的.pro文件在完成所有操作后添加了以下行
mac: LIBS += -framework Cocoa
else:unix|win32: LIBS += -lCocoa
mac: LIBS += -framework IOKit
else:unix|win32: LIBS += -lIOKit
mac:LIBS + = -framework CoreVideo else:unix | win32:LIBS + = -lCoreVideo