Не удалось собрать qt с помощью cygwin64 ... Информация об ошибке "неопределенная ссылка qWindowsVersionInfo ()" - PullRequest
0 голосов
/ 14 июня 2019

Я хочу узнать, как собрать 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.

...