mingw+glfw3 кроскомпиляция linux to windows
Хочу статически подключить glfw3 к своему проекту, но при линковке получаю:
undefined reference to "glfwInit"
у меня:
os=linux; IDE=CodeBlocks; компилятор=x86_64-w64-mingw32-g++; конечная цель = приложение win64;
glfw3 скачана с официального сайта и собрана так:
cmake -DCMAKE_TOOLCHAIN_FILE=CMake/x86_64-w64-mingw32.cmake
билиотека libglfw3.a подключена так: -lglfw3
"nm libglfw3.a" показывает наличие символа glfwInit
весь код приводить не буду , толко упомяну #include "GLFW/glfw3.h" и вызов glfwInit(); в одной из функций, и опции компилятора "-mthreads -D_FILE_OFFSET_BITS=64 -D__WXMSW__" .Вот вывод линкера:
x86_64-w64-mingw32-g++ -o bin/win32/wxLinuxWinows.exe tmp/ReleaseWin/wxLinuxWinowsApp.o tmp/ReleaseWin/wxLinuxWinowsMain.o -L lib/forWin64 -L lib -lwinmm -lgdi32 -lopengl32 -Wl,--subsystem,windows -mwindows -lGLEW lib/forWin64/libwx_mswu-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxtiff-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxjpeg-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxpng-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxregexu-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxscintilla-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxexpat-3.1-x86_64-w64-mingw32.a lib/forWin64/libwxzlib-3.1-x86_64-w64-mingw32.a -lrpcrt4 -loleaut32 -lole32 -luuid -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lwsock32 -lgdi32 -loleacc lib/forWin64/libglfw3.a -lglfw3
tmp/ReleaseWin/wxLinuxWinowsApp.o:wxLinuxWinowsApp.cpp:(.text+0xb1): undefined reference to `glfwInit'
collect2: error: ld returned 1 exit status
еще: c freeglut таже проблема еще: при компиляции под linux(g++) проблемы нет
Ответы (1 шт):
Что именно от меня требовал линковщик я не понял, но проблема решилась так: распаковал исходники glfw в новую свежую папку выполнил:
cmake -DCMAKE_TOOLCHAIN_FILE=CMake/x86_64-w64-mingw32.cmake
и получил другую libglfw3.a и все слинковалось
Выводы:
1) Статические объектные библиотеки скомпилированные разными компиляторами могут не подходить к нашим проектам
2)cmake для новичка не очень понятен, без сопутствующих README и руководств на официальном сайте конкретных библиотек я бы мог бы и не решить эту проблему
3)cmake или make при повторном запуске могут делать не то что от них ожидаешь, нужно заново распаковывать исходники перед сборкой
4)Все еще остается вопрос: как понять что не хватало линкеру, может разрядность не та, может еще что нибудь?
еще: freeglut, glew была таже проблема , решилась компиляцией их нужным компилятором