Sophie

Sophie

distrib > Mageia > 7 > i586 > by-pkgid > 1dd17e0d683ef79b4bb6872bbf359d7f > files > 6614

qt4-doc-4.8.7-26.2.mga7.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- emb-crosscompiling.qdoc -->
  <title>Qt 4.8: Cross-Compiling Qt for Embedded Linux Applications</title>
  <link rel="stylesheet" type="text/css" href="style/style.css" />
  <script src="scripts/jquery.js" type="text/javascript"></script>
  <script src="scripts/functions.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="style/superfish.css" />
  <link rel="stylesheet" type="text/css" href="style/narrow.css" />
  <!--[if IE]>
<meta name="MSSmartTagsPreventParsing" content="true">
<meta http-equiv="imagetoolbar" content="no">
<![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie6.css">
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie7.css">
<![endif]-->
<!--[if IE 8]>
<link rel="stylesheet" type="text/css" href="style/style_ie8.css">
<![endif]-->

<script src="scripts/superfish.js" type="text/javascript"></script>
<script src="scripts/narrow.js" type="text/javascript"></script>

</head>
<body class="" onload="CheckEmptyAndLoadList();">
 <div class="header" id="qtdocheader">
    <div class="content"> 
    <div id="nav-logo">
      <a href="index.html">Home</a></div>
    <a href="index.html" class="qtref"><span>Qt Reference Documentation</span></a>
    <div id="narrowsearch"></div>
    <div id="nav-topright">
      <ul>
        <li class="nav-topright-home"><a href="http://qt.digia.com/">Qt HOME</a></li>
        <li class="nav-topright-dev"><a href="http://qt-project.org/">DEV</a></li>
        <li class="nav-topright-doc nav-topright-doc-active"><a href="http://qt-project.org/doc/">
          DOC</a></li>
        <li class="nav-topright-blog"><a href="http://blog.qt.digia.com/">BLOG</a></li>
      </ul>
    </div>
    <div id="shortCut">
      <ul>
        <li class="shortCut-topleft-inactive"><span><a href="index.html">Qt 4.8</a></span></li>
        <li class="shortCut-topleft-active"><a href="http://qt-project.org/doc/">ALL VERSIONS        </a></li>
      </ul>
     </div>
 <ul class="sf-menu" id="narrowmenu"> 
             <li><a href="#">API Lookup</a> 
                 <ul> 
                     <li><a href="classes.html">Class index</a></li> 
           <li><a href="functions.html">Function index</a></li> 
           <li><a href="modules.html">Modules</a></li> 
           <li><a href="namespaces.html">Namespaces</a></li> 
           <li><a href="qtglobal.html">Global Declarations</a></li> 
           <li><a href="qdeclarativeelements.html">QML elements</a></li> 
             </ul> 
             </li> 
             <li><a href="#">Qt Topics</a> 
                 <ul> 
                        <li><a href="qt-basic-concepts.html">Programming with Qt</a></li>  
                        <li><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li>  
                        <li><a href="qt-gui-concepts.html">UI Design with Qt</a></li>  
                        <li><a href="supported-platforms.html">Supported Platforms</a></li>  
                        <li><a href="technology-apis.html">Qt and Key Technologies</a></li>  
                        <li><a href="best-practices.html">How-To's and Best Practices</a></li>  
              </ul> 
                 </li> 
                 <li><a href="#">Examples</a> 
                     <ul> 
                       <li><a href="all-examples.html">Examples</a></li> 
                       <li><a href="tutorials.html">Tutorials</a></li> 
                       <li><a href="demos.html">Demos</a></li> 
                       <li><a href="qdeclarativeexamples.html">QML Examples</a></li> 
                </ul> 
                     </li> 
                 </ul> 
    </div>
  </div>
  <div class="wrapper">
    <div class="hd">
      <span></span>
    </div>
    <div class="bd group">
      <div class="sidebar">
        <div class="searchlabel">
          Search index:</div>
        <div class="search" id="sidebarsearch">
          <form id="qtdocsearch" action="" onsubmit="return false;">
            <fieldset>
              <input type="text" name="searchstring" id="pageType" value="" />
 <div id="resultdialog"> 
 <a href="#" id="resultclose">Close</a> 
 <p id="resultlinks" class="all"><a href="#" id="showallresults">All</a> | <a href="#" id="showapiresults">API</a> | <a href="#" id="showarticleresults">Articles</a> | <a href="#" id="showexampleresults">Examples</a></p> 
 <p id="searchcount" class="all"><span id="resultcount"></span><span id="apicount"></span><span id="articlecount"></span><span id="examplecount"></span>&nbsp;results:</p> 
 <ul id="resultlist" class="all"> 
 </ul> 
 </div> 
            </fieldset>
          </form>
        </div>
        <div class="box first bottombar" id="lookup">
          <h2 title="API Lookup"><span></span>
            API Lookup</h2>
          <div  id="list001" class="list">
          <ul id="ul001" >
              <li class="defaultLink"><a href="classes.html">Class index</a></li>
              <li class="defaultLink"><a href="functions.html">Function index</a></li>
              <li class="defaultLink"><a href="modules.html">Modules</a></li>
              <li class="defaultLink"><a href="namespaces.html">Namespaces</a></li>
              <li class="defaultLink"><a href="qtglobal.html">Global Declarations</a></li>
              <li class="defaultLink"><a href="qdeclarativeelements.html">QML elements</a></li>
            </ul> 
          </div>
        </div>
        <div class="box bottombar" id="topics">
          <h2 title="Qt Topics"><span></span>
            Qt Topics</h2>
          <div id="list002" class="list">
            <ul id="ul002" >
               <li class="defaultLink"><a href="qt-basic-concepts.html">Programming with Qt</a></li> 
               <li class="defaultLink"><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li> 
               <li class="defaultLink"><a href="qt-gui-concepts.html">UI Design with Qt</a></li> 
               <li class="defaultLink"><a href="supported-platforms.html">Supported Platforms</a></li>  
               <li class="defaultLink"><a href="technology-apis.html">Qt and Key Technologies</a></li> 
               <li class="defaultLink"><a href="best-practices.html">How-To's and Best Practices</a></li> 
            </ul>  
          </div>
        </div>
        <div class="box" id="examples">
          <h2 title="Examples"><span></span>
            Examples</h2>
          <div id="list003" class="list">
        <ul id="ul003">
              <li class="defaultLink"><a href="all-examples.html">Examples</a></li>
              <li class="defaultLink"><a href="tutorials.html">Tutorials</a></li>
              <li class="defaultLink"><a href="demos.html">Demos</a></li>
              <li class="defaultLink"><a href="qdeclarativeexamples.html">QML Examples</a></li>
            </ul> 
          </div>
        </div>
      </div>
      <div class="wrap">
        <div class="toolbar">
          <div class="breadcrumb toolblock">
            <ul>
              <li class="first"><a href="index.html">Home</a></li>
              <!--  Breadcrumbs go here -->
<li>Cross-Compiling Qt for Embedded Linux Applications</li>
            </ul>
          </div>
          <div class="toolbuttons toolblock">
            <ul>
              <li id="smallA" class="t_button">A</li>
              <li id="medA" class="t_button active">A</li>
              <li id="bigA" class="t_button">A</li>
              <li id="print" class="t_button"><a href="javascript:this.print();">
                <span>Print</span></a></li>
            </ul>
        </div>
        </div>
        <div class="content mainContent">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#step-1-set-the-cross-compiler-s-path">Step 1: Set the Cross-Compiler's Path</a></li>
<li class="level1"><a href="#step-2-create-a-target-specific-qmake-specification">Step 2: Create a Target Specific qmake Specification</a></li>
<li class="level1"><a href="#step-3-provide-architecture-specific-files">Step 3: Provide Architecture Specific Files</a></li>
<li class="level1"><a href="#step-4-provide-hardware-drivers">Step 4: Provide Hardware Drivers</a></li>
<li class="level1"><a href="#step-5-build-the-target-specific-executable">Step 5: Build the Target Specific Executable</a></li>
</ul>
</div>
<h1 class="title">Cross-Compiling Qt for Embedded Linux Applications</h1>
<span class="subtitle"></span>
<!-- $$$qt-embedded-crosscompiling.html-description -->
<div class="descr"> <a name="details"></a>
<p>Cross-compiling is the process of compiling an application on one machine, producing executable code for a different machine or device. To cross-compile a <a href="qt-embedded-linux.html">Qt for Embedded Linux</a> application, use the following approach:</p>
<p><b>Note:</b> The cross-compiling procedure has the configuration process in common with the installation procedure; i.e&#x2e;, you might not necessarily have to perform all the mentioned actions depending on your current configuration.</p>
<a name="step-1-set-the-cross-compiler-s-path"></a>
<h2>Step 1: Set the Cross-Compiler's Path</h2>
<p>Specify which cross-compiler to use by setting the <tt>PATH</tt> environment variable. For example, if the current shell is bash, ksh, zsh or sh:</p>
<pre class="cpp"> export PATH=path/to/cross/compiler:$PATH</pre>
<a name="step-2-create-a-target-specific-qmake-specification"></a>
<h2>Step 2: Create a Target Specific qmake Specification</h2>
<p>The qmake tool requires a platform and compiler specific <tt>qmake.conf</tt> file describing the various default values, to generate the appropriate Makefiles. The standard <a href="qt-embedded-linux.html">Qt for Embedded Linux</a> distribution provides such files for several combinations of platforms and compilers. These files are located in the distribution's <tt>mkspecs/qws</tt> subdirectory.</p>
<p>Each platform has a default specification. <a href="qt-embedded-linux.html">Qt for Embedded Linux</a> will use the default specification for the current platform unless told otherwise. To override this behavior, you can use the <tt>configure</tt> script's <tt>-platform</tt> option to change the specification for the host platform (where compilation will take place).</p>
<p>The <tt>configure</tt> script's <tt>-xplatform</tt> option is used to provide a specification for the target architecture (where the library will be deployed).</p>
<p>For example, to cross-compile an application to run on a device with an ARM architecture, using the GCC toolchain, run the configure script at the command line in the following way:</p>
<pre class="cpp"> ./configure -embedded arm -xplatform qws/linux-arm-g++ &lt;other options&gt;</pre>
<p>If neither of the provided specifications fits your target device, you can create your own. To create a custom <tt>qmake.conf</tt> file, just copy and customize an already existing file. For example:</p>
<pre class="cpp"> cp path/to/QtEmbedded/mkspecs/qws/linux-mips-g++/...
    path/to/QtEmbedded/mkspecs/qws/linux-myarchitecture-g++/...</pre>
<p><b>Note:</b> When defining a mkspec for a Linux target, the directory must be prefixed with &quot;linux-&quot;. We recommend that you copy the entire directory.</p>
<p>Note also that when providing you own qmake specifcation, you must use the <tt>configure</tt> script's <tt>-xplatform</tt> option to make <a href="qt-embedded-linux.html">Qt for Embedded Linux</a> aware of the custom <tt>qmake.conf</tt> file.</p>
<a name="step-3-provide-architecture-specific-files"></a>
<h2>Step 3: Provide Architecture Specific Files</h2>
<p>Starting with Qt 4, all of Qt's implicitly shared classes can safely be copied across threads like any other value classes, i.e&#x2e;, they are fully reentrant. This is accomplished by implementing reference counting operations using atomic hardware instructions on all the different platforms supported by Qt.</p>
<p>To support a new architecture, it is important to ensure that these platform-specific atomic operations are implemented in a corresponding header file (<tt>qatomic_ARCH.h</tt>), and that this file is located in Qt's <tt>src/corelib/arch</tt> directory. For example, the Intel 80386 implementation is located in <tt>src/corelib/arch/qatomic_i386.h</tt>.</p>
<p>See the <a href="atomic-operations.html">Implementing Atomic Operations</a> documentation for details.</p>
<a name="step-4-provide-hardware-drivers"></a>
<h2>Step 4: Provide Hardware Drivers</h2>
<p>Without the proper mouse and keyboard drivers, you will not be able to give any input to your application when it is installed on the target device. You must also ensure that the appropriate screen driver is present to make the server process able to put the application's widgets on screen.</p>
<p><a href="qt-embedded-linux.html">Qt for Embedded Linux</a> provides several ready-made mouse, keyboard and screen drivers, see the <a href="qt-embedded-pointer.html">pointer handling</a>, <a href="qt-embedded-charinput.html">character input</a> and <a href="qt-embedded-displaymanagement.html">display management</a> documentation for details.</p>
<p>In addition, custom drivers can be added by deriving from the <a href="qwsmousehandler.html">QWSMouseHandler</a>, <a href="qwskeyboardhandler.html">QWSKeyboardHandler</a> and <a href="qscreen.html">QScreen</a> classes respectively, and by creating corresponding plugins to make use of Qt's plugin mechanism (dynamically loading the drivers into the server application at runtime). Note that the plugins must be located in a location where Qt will look for plugins, e.g&#x2e;, the standard <tt>plugin</tt> directory.</p>
<p>See the <a href="plugins-howto.html">How to Create Qt Plugins</a> documentation and the <a href="tools-plugandpaint.html">Plug &amp; Paint</a> example for details.</p>
<a name="step-5-build-the-target-specific-executable"></a>
<h2>Step 5: Build the Target Specific Executable</h2>
<p>Before building the executable, you must specify the target architecture as well as the target specific hardware drivers by running the <tt>configure</tt> script:</p>
<pre class="cpp"> cd path/to/QtEmbedded
 ./configure -embedded &lt;architecture&gt; -qt-kbd-&lt;keyboarddriver&gt;
             -qt-mouse-&lt;mousedriver&gt; -qt-gfx-&lt;screendriver&gt;</pre>
<p>It is also important to make sure that all the third party libraries that the application and the Qt libraries require, are present in the tool chain. In particular, if the zlib and jpeg libraries are not available, they must be included by running the <tt>configure</tt> script with the <tt>-L</tt> and <tt>-I</tt> options. For example:</p>
<pre class="cpp"> cd path/to/QtEmbedded
 ./configure  &lt;other options&gt;
              -L /path/to/libjpeg/libraries -I /path/to/libjpeg/headers</pre>
<p>The JPEG source can be downloaded from <a href="http://www.ijg.org/">http://www.ijg.org/</a>. The <a href="qt-embedded-linux.html">Qt for Embedded Linux</a> distribution includes a version of the zlib source that can be compiled into the Qt for Embedded Linux library. If integrators wish to use a later version of the zlib library, it can be downloaded from the <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a> website.</p>
<p>Then build the executable:</p>
<pre class="cpp"> cd path/to/myApplication
 qmake -project
 qmake
 make</pre>
<p>That's all. Your target specific executable is ready for deployment.</p>
<table class="generic" width="100%">
 <tr valign="top" class="odd"><td ><b>See also:</b><p><a href="qt-embedded-architecture.html">Qt for Embedded Linux Architecture</a> and <a href="qt-embedded-deployment.html">Deploying Qt for Embedded Linux Applications</a>.</p>
</td></tr>
</table>
</div>
<!-- @@@qt-embedded-crosscompiling.html -->
      </div>
    </div>
    </div> 
    <div class="ft">
      <span></span>
    </div>
  </div> 
  <div class="footer">
    <p>
      <acronym title="Copyright">&copy;</acronym> 2015 The Qt Company Ltd.
      Documentation contributions included herein are the copyrights of
      their respective owners.</p>
    <br />
    <p>
      The documentation provided herein is licensed under the terms of the
      <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation
      License version 1.3</a> as published by the Free Software Foundation.</p>
    <p>
      Documentation sources may be obtained from <a href="http://www.qt-project.org">
      www.qt-project.org</a>.</p>
    <br />
    <p>
      Qt and respective logos are trademarks of The Qt Company Ltd 
      in Finland and/or other countries worldwide. All other trademarks are property
      of their respective owners. <a title="Privacy Policy"
      href="http://en.gitorious.org/privacy_policy/">Privacy Policy</a></p>
  </div>

  <script src="scripts/functions.js" type="text/javascript"></script>
</body>
</html>