【问题标题】:Linking SDL2 in QtCreator在 QtCreator 中链接 SDL2
【发布时间】:2014-07-20 16:35:56
【问题描述】:

所以我想使用 Qt 作为我的 SDL 应用程序的编辑器。当我尝试在 Qt 中创建一个空白项目并链接库时,它就是找不到 SDL2/SDL.h。这是我的 .pro 文件中的内容:

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2.framework/Versions/A/Headers"


mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_mixer
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2_mixer.framework/Versions/A/Headers"


mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_ttf
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2_ttf.framework/Versions/A/Headers"

我找不到任何人发布了如何让它工作的帖子,但我知道必须有一些方法。它一键在 Xcode 中工作,所以我只是做错了什么吗?谢谢。

编辑:

这里是错误信息:

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -mmacosx-version-min=10.6 -Wall -W -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../Qt/5.3/clang_64/mkspecs/macx-clang -I../SpudEngineEditor -I../Control\ Libraries/SDL2.framework/Headers -I../Control\ Libraries/SDL2_mixer.framework/Headers -I../Control\ Libraries/SDL2_ttf.framework/Headers -I../../../Qt/5.3/clang_64/lib/QtWidgets.framework/Versions/5/Headers -I../../../Qt/5.3/clang_64/lib/QtGui.framework/Versions/5/Headers -I../../../Qt/5.3/clang_64/lib/QtCore.framework/Versions/5/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I. -F/Users/Logan/Qt/5.3/clang_64/lib -o Camera.o ../SpudEngineEditor/Camera.cpp
In file included from ../SpudEngineEditor/Camera.cpp:9:
In file included from ../SpudEngineEditor/Camera.h:13:
../SpudEngineEditor/CoreEngine.h:14:9: warning: unknown pragma ignored [-Wunknown-pragmas]
#pragma comment (lib, "glu32.lib")
        ^
In file included from ../SpudEngineEditor/Camera.cpp:9:
In file included from ../SpudEngineEditor/Camera.h:13:
In file included from ../SpudEngineEditor/CoreEngine.h:34:
../Control Libraries/SDL2_ttf.framework/Headers/SDL_ttf.h:30:10: fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>

编辑:我已经得到它,所以我可以包含,但不是,这是一个问题,因为 SDL 混音器和 SDL rtf 都使用

【问题讨论】:

  • 一些澄清:Qt Creator 只是一个 IDE。它通常与 Qt SDK 一起安装,并且最常用于开发 Qt 应用程序。但它仍然是独立于 Qt(SDK 或库)的东西。
  • @hyde 我打算在项目中使用QT SDK,我只需要先弄清楚如何链接库。
  • 在这样的问题中,显示确切的失败编译命令通常是一个好主意(在 Qt Creator 的编译输出视图中查找它)。如果我的回答没有解决这个问题,那么您可以将其添加到问题中。
  • 你能看到编译命令吗?对于 gcc 它将是 gcc ... -I ... -c ... main.cpp 的东西,大概与 clang 相同。
  • @hyde 更新了问题以包含该问题。

标签: c++ macos qt sdl qmake


【解决方案1】:

路径中有空格时应使用双引号,例如:

INCLUDEPATH += "$$PWD/../Control Libraries/SDL2.framework/Versions/A/Headers"

除非您确实希望它们成为单独的参数,例如:

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_mixer

问题编辑后:所以你有#include &lt;SDL2/SDl.h&gt;。它似乎有错误的情况,应该是

#include <SDL2/SDL.h>

【讨论】:

  • 这似乎不起作用,我在问题中包含了完整的错误。
  • 让我包含 而不是 这是一个问题,因为 SDL 混音器和 SDL ttf 都尝试使用 SDL2/SDL.h。我已更新问题以反映新的变化。
  • @BlueSpud SDL.h 的完整绝对路径是什么?
  • @BlueSpud 我知道我已经晚了 2 年,但以防万一这对某人有用:原因是头文件直接包含在框架目录的 Headers 中。您可以在 Headers 中手动创建一个 SDL2 目录,然后将所有 .h 文件移到那里...看起来并不理想,但它确实有效。
【解决方案2】:

编译器清楚错误:

../SpudEngineEditor/main.cpp:3:10:致命错误:找不到“SDL2/SDl.h”文件

你应该做的是替换这一行:

#include <SDL2/SDl.h>

与:

#include <SDL2/SDL.h>
//               ^, yes uppercase.

此外,对于带有空格的路径,您应该使用例如为此目的而建立的the corresponding quote qmake function,它也可以在内部使用双引号。双引号也可能在所有情况下都有效,但如果有一个已建立的功能,我个人更喜欢花哨的功能。 :-)

如果我不重复相同的路径几次,我也会建立一个辅助变量。

此外,我会编写一个 qmake 函数,尽管内联调用不需要它,它使用真正的 qmake 功能,for 循环,因为你在重复同样的事情。因此,我会写这样的东西:

setSDLPaths() {
    CONTROL_LIBRARIES_PATH = $$quote($$PWD/../Control Libraries/)
    LIST = SDL2 SDL2_ttf SDL2_mixer
    for(item, LIST) {
        mac: LIBS += -F$$CONTROL_LIBRARIES_PATH -framework $$item
        INCLUDEPATH += $$CONTROL_LIBRARIES_PATH/$${item}.framework/Versions/A/Headers
    }
}

这将大大简化您的代码,基本上是单行:

$$setSDLPaths()

【讨论】:

  • 我应该把这个函数放在哪里?只是更改名称实际上不起作用,将其放入 .pro 文件中也不起作用。
  • @BlueSpud: does not work 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多