- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Windows 10 上的 Clion 中使用此 CMAKE 文件(使用 MinGW 5.0):
cmake_minimum_required(VERSION 3.3)
project(ClionProjects)
# configure the SDL (cf. "SDL2-2.0.3\i686-w64-mingw32\lib\pkgconfig\sdl2.pc")
# C++ flags
set(SDL2_Flags "-mwindows -Wl,--no-undefined -static-libgcc")
# library paths
set(SDL2_ROOT "C:/SDL2/i686-w64-mingw32")
set(SDL2_Includes "${SDL2_ROOT}/include")
set(SDL2_LibDir "${SDL2_ROOT}/lib")
# imported targets for CMake (cf. https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets)
add_library(SDL2 STATIC IMPORTED)
add_library(SDL2main STATIC IMPORTED)
add_library(SDL2_image STATIC IMPORTED)
add_library(SDL2_ttf STATIC IMPORTED)
set_property(TARGET SDL2 PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2.a")
set_property(TARGET SDL2main PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2main.a")
set_property(TARGET SDL2_image PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2_image.a")
set_property(TARGET SDL2_ttf PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2_ttf.a")
# the libs to link against
# note: as always with gcc, the order is important...
set(SDL2_Libs mingw32 SDL2 SDL2main m SDL2_image SDL2_ttf dinput8 dxguid dxerr8 user32 gdi32 winmm imm32 ole32 oleaut32 shell32 version uuid)
# configure the project
# include the SDL flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${SDL2_Flags}")
# collect the sources
set(SOURCE_FILES
Kod/Graphics/Graphics.cc
Kod/Graphics/Graphics.h
Kod/Game/Game.cc
Kod/Game/Game.h
Kod/Gameboard/Gameboard.cc
Kod/Gameboard/Gameboard.h
Kod/Meeple/Meeple.cc
Kod/Meeple/Meeple.h
Kod/Player/Player.cc
Kod/Player/Player.h
Kod/Resource/Resource.cc
Kod/Resource/Resource.h
Kod/Tile/Tile.cc
Kod/Tile/Tile.h
Kod/Carcassonne.cc)
# define the target
add_executable(ClionProjects ${SOURCE_FILES} Kod/Carcassonne.cc)
# include the SDL headers
target_include_directories(ClionProjects SYSTEM PRIVATE ${SDL2_Includes})
# link against the SDL (and its dependencies)
target_link_libraries(ClionProjects ${SDL2_Libs})
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lSDL2 -lSDL2-image")
#add_executable(ClionProjects ${SOURCE_FILES} Kod/Carcassonne.cc)
#target_link_libraries(ClionProjects SDL2main SDL2 SDL2_image)
我收到这个错误:
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `Load_Glyph':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:609: undefined reference to `FT_Load_Glyph'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:671: undefined reference to `FT_Outline_Transform'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:677: undefined reference to `FT_Get_Glyph'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:678: undefined reference to `FT_Stroker_New'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:694: undefined reference to `FT_Render_Glyph'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:895: undefined reference to `FT_Done_Glyph'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:607: undefined reference to `FT_Get_Char_Index'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:682: undefined reference to `FT_Stroker_Set'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:683: undefined reference to `FT_Glyph_Stroke'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:684: undefined reference to `FT_Stroker_Done'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:686: undefined reference to `FT_Glyph_To_Bitmap'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:688: undefined reference to `FT_Done_Glyph'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_Init':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:340: undefined reference to `FT_Init_FreeType'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_CloseFont':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:927: undefined reference to `FT_Done_Face'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_OpenFontIndexRW':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:432: undefined reference to `FT_Open_Face'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:460: undefined reference to `FT_Set_Char_Size'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:454: undefined reference to `FT_Set_Charmap'
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:484: undefined reference to `FT_Set_Pixel_Sizes'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_SizeUTF8':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:1241: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_RenderUTF8_Solid':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:1429: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_RenderUTF8_Shaded':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:1610: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_RenderUTF8_Blended':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:1780: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_RenderUTF8_Blended_Wrapped':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:2048: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_Quit':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:2196: undefined reference to `FT_Done_FreeType'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_GetFontKerningSize':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:2209: undefined reference to `FT_Get_Kerning'
C:/SDL2/i686-w64-mingw32/lib/libSDL2_ttf.a(SDL_ttf.o): In function `TTF_GlyphIsProvided':
/Users/slouken/release/SDL_ttf/SDL2_ttf-2.0.12-source/foo-x86/../SDL_ttf.c:1138: undefined reference to `FT_Get_Char_Index'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\ClionProjects.dir\build.make:289: recipe for target 'ClionProjects.exe' failed
mingw32-make.exe[3]: *** [ClionProjects.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/ClionProjects.dir/all] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/ClionProjects.dir/all' failed
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/ClionProjects.dir/rule' failed
mingw32-make.exe[1]: *** [CMakeFiles/ClionProjects.dir/rule] Error 2
mingw32-make.exe: *** [ClionProjects] Error 2
makefile:117: recipe for target 'ClionProjects' failed
我已将 SDL2_ttf.dll 添加到 system32 和可执行文件所在的文件夹,将 SDL2_ttf.h 添加到/include(SDL2 的所有其他 .h 文件所在的位置),并将 libSDL2_ttf.a 添加到/lib。我不明白为什么会出现这些错误...我的标志顺序有问题吗?
最佳答案
下面是我如何使用 CLion 使用 SDL2、SDL2_ttf、SDL2_mixer 等。这与您目前所做的完全不同,所以请记住这一点。我将为类似 POSIX 的环境使用 MSYS2(而不是您正在使用的 MINGW/MSys)。
首先,我将从安装 MSYS2 开始。从 http://msys2.github.io/ 中获取.然后,根据您安装的版本,您将在开始菜单中获得 2 或 3 个快捷方式。
从现在开始,我会坚持使用 MINGW-W64-x86_64
版本的工具链。如果您使用的是 i686
,请将 x86_64
替换为 i686
(并将 mingw64
替换为 mingw32
).
从开始菜单打开 MinGW-w64 Win64 shell
快捷方式。您将受到 bash shell 的欢迎。此时我会先安装工具链。在提示符下,输入以下命令
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-pkg-config mingw-w64-x86_64-make mingw-w64-x86_64-gdb
然后包管理器将为您安装 gcc、cmake、pkg-config、make 和 gdb。这包括这些工具的所有依赖项,因此需要相当多的时间。
然后通过在提示符下调用以下命令来安装库:
pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_image
pacman(包管理器)将下载并安装这 3 个库及其依赖项。
上面的步骤在我的脑海中。我还没有重新测试它(因为我已经有了工作环境)。如果您遇到问题,请告诉我。我可能会稍后重新测试它。另外上面的步骤也适用于 Arch Linux 用户,只需替换包名就可以了。
接下来,打开 CLion。转到文件->设置。在构建、执行和部署 下选择工具链。然后把MinGW home改成你MSYS2安装路径下的mingw64。
那么一切就绪。
我将使用 FindPkgConfig
模块获取链接器标志并包含我使用的每个库的标志。该模块响应我们之前安装的 pkg-config 命令。在 CMakeList.txt
中,添加以下行:
INCLUDE(FindPkgConfig)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_IMG REQUIRED SDL2_image)
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
pkg_check_modules(SDL2_MIX REQUIRED SDL2_mixer)
include_directories(${SDL2_INCLUDE_DIRS}
${SDL2_IMG_INCLUDE_DIRS}
${SDL2_TTF_INCLUDE_DIRS}
${SDL2_MIX_INCLUDE_DIRS})
link_directories (${SDL2_LIBRARY_DIRS}
${SDL2_IMG_LIBRARY_DIRS}
${SDL2_TTF_LIBRARY_DIRS}
${SDL2_MIX_LIBRARY_DIRS})
target_link_libraries (TestSDL2
${SDL2_LIBRARIES}
${SDL2_IMG_LIBRARIES}
${SDL2_TTF_LIBRARIES}
${SDL2_MIX_LIBRARIES})
将 TestSDL2 更改为您的可执行文件。您可能必须删除现有的 FindSDL 或任何查找 SDL 库的命令。
这种方法比自定义模块更简洁。缺点是它与系统的库文件密切相关(特别是如果您使用的是 Linux)。另外,如果你必须打包exe文件,你将不得不手动在MSYS2/mingw64/bin中寻找dll文件(顺便说一句,这并不难)。
另一种可能的方法是将 SDL 作为子项目包含在内。我以前没有这样做过,所以我无法解释。
我认为在您熟悉其工作原理之后,您也可以将相同的方法应用于其他库(例如 box2d)。您可以在 https://github.com/Alexpux/MINGW-packages 查看可用包的列表。 ,必须通过在库名称之前插入架构名称来稍微修改包名称(例如 mingw-w64-x86_64-box2d
for mingw-w64-box2d
包)。
关于c++ - "undefined reference to ` FT_Load_Glyph '"和其他使用 CMAKE 的 SDL2_ttf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34226818/
我收到错误“:DevanagariSangamMN:FT_Load_Glyph 失败:错误 6。”当我尝试从我的 iphone 应用程序登录 facebook 时,它没有进入任何请求成功功能,我从最近
在 Windows 10 上的 Clion 中使用此 CMAKE 文件(使用 MinGW 5.0): cmake_minimum_required(VERSION 3.3) project(Clion
我正在查看 Apple 的 ZoomingPDFViewer示例(来源可从链接获得)。当它运行时,它给出了这个错误: ZoomingPDFViewer[5751] : KSTFBB+Helvetic
我是一名优秀的程序员,十分优秀!