Я хочу узнать, как собрать qt на windows 10 (cygwin64) для других кросс-компиляций Linux. Но я встречал некоторые ошибки.
Так что я пытаюсь настроить самое простое. Но я все еще встречал ошибку ссылки (символ qWindowsVersionInfo не найден).
Я пытаюсь выполнить простейшую настройку в оболочке cygwin64:
cd /cygdrive/d/Qt/qt-build
../qt-everywhere-src-5.12.3/configure -v -platform cygwin-g++
Но я получил ошибку:
g++ -o "../bin/qmake" ...<many obj files>
qglobal.o:In the function ‘winSp_helper’:
/cygdrive/d/Qt/qt-everywhere-src-5.12.3/qtbase/src/corelib/global/qglobal.cpp:2098:‘qWindowsVersionInfo()’ undefined reference
/cygdrive/d/Qt/qt-everywhere-src-5.12.3/qtbase/src/corelib/global/qglobal.cpp:2098:(.text+0x179): truncated re-addressing to match: R_X86_64_PC32 for undefined symbol qWindowsVersionInfo()
qglobal.o: In the function ‘osVer_helper’:
/cygdrive/d/Qt/qt-everywhere-src-5.12.3/qtbase/src/corelib/global/qglobal.cpp:2114:(.text+0x33a): truncated re-addressing to match: R_X86_64_PC32 for undefined symbol qWindowsVersionInfo()
collect2: Error: ld returns 1
make: *** [Makefile:189:../bin/qmake] Error 1
Я нахожу функцию qWindowsVersionInfo, определенную в исходном коде D: \ Qt \ qt-везде-src-5.12.3 \ qtbase \ src \ corelib \ global \ qoperatingsystemversion_win.cpp
И я прочитал сгенерированный Makefile (D: \ Qt \ qt-build \ qtbase \ qmake \ Makefile):
qoperatingsystemversion_win.o:
$(SOURCE_PATH)/src/corelib/global/qoperatingsystemversion_win.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
Итак, цель существует.
Но на qoperatingsystemversion_win.o никто не ссылается.
Эта цель генерирует строку ошибки (g ++ -o "../bin/qmake" ...):
$(BUILD_PATH)/bin/qmake$(EXEEXT): $(OBJS) $(QOBJS) qlibraryinfo.o
$(CXX) -o "$@" $(OBJS) $(QOBJS) qlibraryinfo.o $(LFLAGS)
Он не использует цель qoperatingsystemversion_win.o.
Как я могу использовать цель qoperatingsystemversion_win.o?
Этот Makefile генерируется командой configure. Я не могу изменить это больше.
Какая платформа правильна в этой ситуации? win32-g ++ или cygwin-g ++?
Если я перейду на cygwin-g ++, сконфигурируйте с помощью cat Makefile.unix.unix для получения финального Makefile. У меня есть ошибка.
Если я перейду на win32-g ++, при настройке будет преобразован Makefile.unix.win32 в финальный Makefile. У меня сразу новая ошибка:
g++ -c o main.o ......
/cygdrive/d/Qt/qt-everywhere-src-5.12.3/qtbase/qmake/main.cpp: In the function ‘int installFileOrDirectory(const QString&, const QString&)’:
/cygdrive/d/Qt/qt-everywhere-src-5.12.3/qtbase/qmake/main.cpp:303:15: Error: ‘::symlink’ is not declared
Он по-прежнему не может работать правильно.
Так скажите, пожалуйста, в чем разница с win32-g ++ и cygwin-g ++ в windows 10.