Так что мне удалось связать FreeType2 с динамическим путем, просто включив каталоги зависимостей и ничего не связывая. Динамически это круто и все такое, но я бы очень хотел связать это статически. Я протестировал предварительно скомпилированные двоичные файлы (из которых я получил dll) и создал свой собственный (что я сделал, загрузив, используя cmake gui для сборки с параметрами по умолчанию рабочего пространства .sln, а затем щелкнув сборку всех). Но что бы я ни пытался связать или использовать статически, это даст мне неопределенные ссылки.
Вот результат:
MAKEFLAGS=s -j9
COMPILER_PATH=c:/progra~1/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/10.2.0/;c:/progra~1/mingw64/bin/../libexec/gcc/;c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/;c:/progra~1/mingw64/bin/../lib/gcc/;c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../lib/;c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/;c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../
COLLECT_GCC_OPTIONS='-g' '-v' '-o' 'UI.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
c:/progra~1/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/10.2.0/collect2.exe -plugin c:/progra~1/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/10.2.0/liblto_plugin-0.dll -plugin-opt=c:/progra~1/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/10.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\Eric\AppData\Local\Temp\ccoaWDLZ.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep -Bdynamic -o UI.exe c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/crtbegin.o -Lc:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0 -Lc:/progra~1/mingw64/bin/../lib/gcc -Lc:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib -Lc:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../lib -Lc:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib -Lc:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../.. @C:\Users\Eric\AppData\Local\Temp\ccmOOCrP -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/crtend.o
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../Dependencies/FreeType/freetype.lib(../../../objs/x64/Release Static/bdf.obj):(.xdata[$unwind$_bdf_parse_properties]+0x18): undefined reference to `__GSHandlerCheck'
c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
-This repeats for a while-
../Dependencies/FreeType/freetype.lib(../../../objs/x64/Release Static/bdf.obj):(.xdata[$unwind$_bdf_parse_start]+0x1c): undefined reference to `__GSHandlerCheck'
c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../Dependencies/FreeType/freetype.lib(../../../objs/x64/Release Static/bdf.obj):(.xdata[$unwind$bdf_interpret_style]+0x1c): undefined reference to `__GSHandlerCheck'
c:/progra~1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../Dependencies/FreeType/freetype.lib(../../../objs/x64/Release Static/bdf.obj):(.xdata[$unwind$BDF_Face_Init]+0x14): undefined reference to `__GSHandlerCheck'
collect2.exe: error: ld returned 1 exit status
mingw32-make[3]: *** [CMakeFiles\UI.dir\build.make:269: UI.exe] Error 1
mingw32-make[2]: *** [CMakeFiles\Makefile2:94: CMakeFiles/UI.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:101: CMakeFiles/UI.dir/rule] Error 2
mingw32-make: *** [makefile:136: UI] Error 2
Вот мой файл cmake:
make_minimum_required(VERSION 3.7)
project(UI)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(FREETYPE_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/Dependencies/FreeType/freetype.lib)
set(FREETYPE_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/Dependencies/FreeType/include)
set(CMAKE_CXX_STANDARD 20)
file(GLOB_RECURSE SOURCE_FILES "UI/*.cpp" "UI/*.h" "Sandbox/*.cpp" "Sandbox/*.h")
file(GLOB_RECURSE DEP_FILES "Dependencies/FreeType/src/*.c" "Dependencies/FreeType/src/*.h")
set(dir ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(Dependencies)
include_directories(${PROJECT_NAME} "Dependencies/OpenGL/include")
include_directories(${PROJECT_NAME} "Dependencies/Math/include")
include_directories(${PROJECT_NAME} "Dependencies/GLFW/include")
include_directories(${PROJECT_NAME} "Dependencies/FreeType/include")
include_directories(${PROJECT_NAME})
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/Dependencies/FreeType/freetype.lib
${CMAKE_CURRENT_LIST_DIR}/Dependencies/OpenGL/OpenGL.a
${CMAKE_CURRENT_LIST_DIR}/Dependencies/Math/Math.a
${CMAKE_CURRENT_LIST_DIR}/Dependencies/GLFW/libglfw3.a
)
Если у кого-то есть идея, пожалуйста, помогите мне :) Хорошего дня.
freetype.lib
создана для Visual Studio. Вы не можете использовать эту библиотеку при сборке проекта в MinGW. ИWarning: corrupt .drectve at end of def file
намекает на эту несовместимость. - person Tsyvarev   schedule 30.04.2021MinGW Makefiles
. - person Tsyvarev   schedule 30.04.2021mingw32-make
из каталога сборки. Также существует универсальный способ создания проекта CMake:cmake --build .
См. этот вопрос: заголовок stackoverflow.com/questions/8558703/ - person Tsyvarev   schedule 30.04.2021