Tool definition for linux cross-compilation on windows
-
Honestly, the configure process with an error message like:
"...ld.exe: could not find ./arch.obj"
when I have "MAKEFILE_GENERATOR=MINGW" in my -xplatform mkspec.
The configure.exe exit then, no Makefiles will be generated.When I change it to "MAKEFILE_GENERATOR = UNIX", then this arch config-test exit with something like:
"'{' is not recognized as a internal or external command".
But the configure.exe do not exit and generates the Makefiles.Very strange, I think at the moment, Qt (more accurate: the configure mechanism) is not ready for Cross-Compiling from Windows -> Linux...
-
OK, thanks for response.
[quote author="jseeQt" date="1390488350"]Honestly, the configure process with an error message like:
"...ld.exe: could not find ./arch.obj"
when I have "MAKEFILE_GENERATOR=MINGW" in my -xplatform mkspec.
The configure.exe exit then, no Makefiles will be generated.
[/quote]
That ios the problem I am hitting too.[quote author="jseeQt" date="1390488350"]
When I change it to "MAKEFILE_GENERATOR = UNIX", then this arch config-test exit with something like:
"'{' is not recognized as a internal or external command".
But the configure.exe do not exit and generates the Makefiles.Very strange, I think at the moment, Qt (more accurate: the configure mechanism) is not ready for Cross-Compiling from Windows -> Linux...[/quote]
In this case it is trying to use linux commands which are not available on Windows. I have installed the Gnu substitutes, but this did not make sense either.I hope to find a solution.
-
Hello again,
I found a solution...apply this changes to your mkspec qmake.conf:
MAKEFILE_GENERATOR = UNIX
QMAKE_PLATFORM = win32
QMAKE_COMPILER = gccinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)include(../common/g++-unix.conf)
-
oh, it should be:
#include(../common/g++-unix.conf) -
Look into my "qmake.conf":https://github.com/mariuszekpl/qt52-cross-compile-tegra2-windows-scripts/blob/master/try_0003/qmake.conf
and "03_configure.bat":https://github.com/mariuszekpl/qt52-cross-compile-tegra2-windows-scripts/blob/master/try_0003/03_configure.batThis works for me!
Wery strange is this:
*QMAKE_MOVE = dir & move *
I don't now why , but this works*QMAKE_MOVE = move *
Don't work , mingw-32-make can't find move command -
Thanks to JseeQt and marius,maximus for feedback. I will try and report back.
-
I have adopted the complete qmake.conf of marius above. I contains also JseeQt's suggestions.
I certainly needed to adapt the compiler names and also the compiler settings.
Furthermore, I had to change
@
QMAKE_LIBS += -lrt -lpthread
@basically I removed "-ldl" which had resulted in a missing lib error.
I could manage to go through the complete configuration process.
Starting mingw32-make the compilation ran for a while until the subsequent error occurred.@
mingw32-make[2]: Entering directory 'C:/Qt/Qt5/5.1.0/Qt5.1.0_Source_Wnds/qtbase/src/corelib'
arm-uclinuxeabi-g++ -c -pipe -mthumb -march=armv7 -mfix-cortex-m3-ldrd -g -fPIC -std=c++0x -Wall -W -D_REENTRANT -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_
COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I....\mkspecs\linux-arm-uclinuxeabi-g++ -I. -I....\inc
lude -I....\include\QtCore -I....\include\QtCore\5.1.1 -I....\include\QtCore\5.1.1\QtCore -Iglobal -I..\3rdparty\pcre -I..\3rdparty\harfbuzz\src -I..\3rdparty\md5 -I..\3rdparty\md4 -I..\3rdparty\sha3 -I.moc\debug_static -o .obj
\debug_static\qlibraryinfo.obj global\qlibraryinfo.cpp
global\qlibraryinfo.cpp: In static member function 'static QString QLibraryInfo::location(QLibraryInfo::LibraryLocation)':
global\qlibraryinfo.cpp:349:20: error: 'QT_CONFIGURE_SETTINGS_PATH' was not declared in this scope
Makefile:10767: recipe for target '.obj\debug_static\qlibraryinfo.obj' failed
mingw32-make[2]: *** [.obj\debug_static\qlibraryinfo.obj] Error 1
mingw32-make[2]: Leaving directory 'C:/Qt/Qt5/5.1.0/Qt5.1.0_Source_Wnds/qtbase/src/corelib'
Makefile:124: recipe for target 'sub-corelib-make_first' failed
mingw32-make[1]: *** [sub-corelib-make_first] Error 2
mingw32-make[1]: Leaving directory 'C:/Qt/Qt5/5.1.0/Qt5.1.0_Source_Wnds/qtbase/src'
makefile:41: recipe for target 'sub-src-make_first' failed
mingw32-make: *** [sub-src-make_first] Error 2C:\Qt\Qt5\5.1.0\Qt5.1.0_Source_Wnds\qtbase>
@Any ideas for solving are welcome
-
I have this same error and have sollution for this.
But forget do "git push" and update on githubPlease look into my 03_configure.bat agine.
After call configure I update few broken files.
@echo QT_CONFIG += xkbcommon-qt >>mkspecs\qconfig.pri
echo static const char qt_configure_settings_path_str[256 + 12] = "qt_stngpath=/usr/local/Qt-5.2.0/etc/xdg"; >>src\corelib\global\qconfig.cpp
echo #define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12; >>src\corelib\global\qconfig.cpp@
-
In my opinion qtbase\tools\configure
has small BUG@
enum Platforms {
WINDOWS,
WINDOWS_CE,
WINDOWS_RT,
QNX,
BLACKBERRY,
ANDROID
};@configure don't have platform LINUX and default is WINDOWS
thi is BUG line 3871 in configureapp.cpp
@ if ((platform() != WINDOWS) && (platform() != WINDOWS_CE) && (platform() != WINDOWS_RT))
tmpStream << "#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;" << endl;
@ -
[quote author="marius.maximus" date="1391535321"]I have this same error and have sollution for this.
But forget do "git push" and update on githubPlease look into my 03_configure.bat agine.
After call configure I update few broken files.
@echo QT_CONFIG += xkbcommon-qt >>mkspecs\qconfig.pri
echo static const char qt_configure_settings_path_str[256 + 12] = "qt_stngpath=/usr/local/Qt-5.2.0/etc/xdg"; >>src\corelib\global\qconfig.cpp
echo #define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12; >>src\corelib\global\qconfig.cpp@
[/quote]Trying to understand what you are doing. I am a bit puzzled because this
@
"qt_stngpath=/usr/local/Qt-5.2.0/etc/xdg";
@is a linux path, but we are on windows.
The subsequent post for configureapp.cpp is referring to the same thing.
Now the question comes up where platform relates to. We are on a windows platform but doing a cross-compilation to linux.
I had downloaded the sources as tar.gz because linux is the target.
A final question what is the source archive you used?
.zip or tar.gz ?I had downloaded tar.gz because linux is the target.
-
is a linux path but we are on windows, but it is cross-compilation for linux ;)
I cross compile for my ARM in linux x86 and compare files created in windows and linux. And add missing things ;)
I used ZIP on windows 8.1 and tar.gz on linux x86
In my opinion platform() should look like this :
@int Configure::platform() const
{
const QString qMakeSpec = dictionary.value("QMAKESPEC");
const QString xQMakeSpec = dictionary.value("XQMAKESPEC");if ((xQMakeSpec.startsWith("winphone") || xQMakeSpec.startsWith("winrt"))) return WINDOWS_RT; if ((qMakeSpec.startsWith("wince") || xQMakeSpec.startsWith("wince"))) return WINDOWS_CE; if (xQMakeSpec.contains("qnx")) return QNX; if (xQMakeSpec.contains("blackberry")) return BLACKBERRY; if (xQMakeSpec.contains("android")) return ANDROID;
//////////////////// BEGIN add by marius.maximus //
if (xQMakeSpec.startsWith("linux"))
return LINUX;
//////////////////// END add by marius.maximus //return WINDOWS;
}
@ -
You have a point there. However, it is not logical that this should be missing for longer already. So the concept might be different and not requiring linux explicitly.
You could file a bug report on "JIRA":https://bugreports.qt-project.org/secure/Dashboard.jspa on this.
Did you succeed with the cross-compilation on windows or are still stuck with other problems in between?
-
bq. You have a point there. However, it is not logical that this should be missing for longer already. So the concept might be different and not requiring linux explicitly.
Maybe nobody sent the patch;)
Jira is my favorite bugreports tool I have my own and I'm admin ;)
All works OK , I tessted it on this module
http://www.toradex.com/products/colibri-arm-computer-modules/colibri-t20 It is tegra II
After compile I add it to QtCreateor compile few examples and run it .
It works ! -
Thanks for reply. Good to know that you succeeded. I will give it a further shot then.
With JIRA I meant "Qt JIRA.":https://bugreports.qt-project.org/secure/Dashboard.jspa If nobody raises the issue, nobody will take care.
-
Still the same issue with echoing fix you have posted.
I have tried with Qt5.1 as already posted before and this is the trial with Qt5.2.1 released today.
@
arm-uclinuxeabi-g++ -c -pipe -mthumb -march=armv7 -mfix-cortex-m3-ldrd -g -fPIC -std=c++0x -Wall -W -D_REENTRANT -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_
COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I....\mkspecs\linux-arm-uclinuxeabi-g++ -I. -I....\inc
lude -I....\include\QtCore -I....\include\QtCore\5.2.1 -I....\include\QtCore\5.2.1\QtCore -Iglobal -I..\3rdparty\pcre -I..\3rdparty\harfbuzz\src -I..\3rdparty\md5 -I..\3rdparty\md4 -I..\3rdparty\sha3 -I.moc -o .obj\qlibraryinfo
.obj global\qlibraryinfo.cpp
global\qlibraryinfo.cpp: In static member function 'static QString QLibraryInfo::location(QLibraryInfo::LibraryLocation)':
global\qlibraryinfo.cpp:363:20: error: 'QT_CONFIGURE_SETTINGS_PATH' was not declared in this scope
Makefile:11126: recipe for target '.obj\qlibraryinfo.obj' failed
mingw32-make[3]: *** [.obj\qlibraryinfo.obj] Error 1
mingw32-make[3]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase/src/corelib'
Makefile:129: recipe for target 'sub-corelib-make_first' failed
mingw32-make[2]: *** [sub-corelib-make_first] Error 2
mingw32-make[2]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase/src'
Makefile:41: recipe for target 'sub-src-make_first' failed
mingw32-make[1]: *** [sub-src-make_first] Error 2
mingw32-make[1]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase'
makefile:60: recipe for target 'module-qtbase-make_first' failed
mingw32-make: *** [module-qtbase-make_first] Error 2c:\Qt\Qt5\5.2.1\Qt5.2.1_Source_Wnds>
@This is the code section (line 363 is shown as line 6 below)
@
const char *path = 0;
if (unsigned(loc) < sizeof(qt_configure_prefix_path_strs)/sizeof(qt_configure_prefix_path_strs[0]))
path = qt_configure_prefix_path_strs[loc] + 12;
#ifndef Q_OS_WIN // On Windows we use the registry
else if (loc == SettingsPath)
path = QT_CONFIGURE_SETTINGS_PATH;
#endif
@ -
QT_CONFIGURE_SETTINGS_PATH should be created by configure
But configure don't create it (it is bug)
You must by hand add it to
src\corelib\global\qconfig.cpp -
You are completely right. Even though I had checked it before with other version it was not carried with version 5.2.1.
I did not use the "call configure.bat" and the three subsequent echos are ignored.Sorry my fault.
It goes further now, but eventually comes up with the next problem.
@
arm-uclinuxeabi-g++ -c -pipe -mthumb -march=armv7 -mfix-cortex-m3-ldrd -g -fPIC -std=c++0x -Wall -W -D_REENTRANT -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_
COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I....\mkspecs\linux-arm-uclinuxeabi-g++ -I. -I....\inc
lude -I....\include\QtCore -I....\include\QtCore\5.2.1 -I....\include\QtCore\5.2.1\QtCore -Iglobal -I..\3rdparty\pcre -I..\3rdparty\harfbuzz\src -I..\3rdparty\md5 -I..\3rdparty\md4 -I..\3rdparty\sha3 -I.moc -o .obj\qwaitconditi
on_unix.obj thread\qwaitcondition_unix.cpp
thread\qwaitcondition_unix.cpp: In function 'void qt_initialize_pthread_cond(pthread_cond_t*, const char*)':
thread\qwaitcondition_unix.cpp:83:61: error: 'pthread_condattr_setclock' was not declared in this scope
Makefile:13335: recipe for target '.obj\qwaitcondition_unix.obj' failed
mingw32-make[3]: *** [.obj\qwaitcondition_unix.obj] Error 1
mingw32-make[3]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase/src/corelib'
Makefile:129: recipe for target 'sub-corelib-make_first' failed
mingw32-make[2]: *** [sub-corelib-make_first] Error 2
mingw32-make[2]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase/src'
Makefile:41: recipe for target 'sub-src-make_first' failed
mingw32-make[1]: *** [sub-src-make_first] Error 2
mingw32-make[1]: Leaving directory 'c:/Qt/Qt5/5.2.1/Qt5.2.1_Source_Wnds/qtbase'
makefile:60: recipe for target 'module-qtbase-make_first' failed
mingw32-make: *** [module-qtbase-make_first] Error 2c:\Qt\Qt5\5.2.1\Qt5.2.1_Source_Wnds>
@ -
Maybe your toolchain do not have pthread_condattr_setclock ?
-
I see 5.2.1 , Ooooo new Qt release ;)
-
[quote author="marius.maximus" date="1391721007"]Maybe your toolchain do not have pthread_condattr_setclock ?
[/quote]Yes, you are probably right. I was not able to track this one down before posting. However, I suspected already the same as you.
[quote author="marius.maximus" date="1391722383"]I see 5.2.1 , Ooooo new Qt release ;)[/quote]
Yes, I must have downloaded while it was very fresh. Unfortunately, it did not change things.
[edit, koahnig]