Ubuntu 14.04 LTS + Qt 5.2.1 源码编译搭建环境

配置

配置选项

+ cd qtbase
+ /home/liu/sfw/qt-everywhere-opensource-src-5.2.1/qtbase/configure -top-level -h
Usage:  configure [options]

Installation options:

 These are optional, but you may specify install directories.

    -prefix  ...... This will install everything relative to 
                         (default /usr/local/Qt-5.2.1, $PWD if -developer-build is active)

    -extprefix  ... When -sysroot is used, install everything to ,
                         rather than into SYSROOT/PREFIX.

    -hostprefix [dir] .. Tools and libraries needed when developing
                         applications are installed in [dir]. If [dir] is
                         not given, the current build directory will be used.
                         (default EXTPREFIX)

 You may use these to separate different parts of the install:

    -bindir  ......... User executables will be installed to 
                            (default PREFIX/bin)
    -headerdir  ...... Headers will be installed to 
                            (default PREFIX/include)
    -libdir  ......... Libraries will be installed to 
                            (default PREFIX/lib)
    -archdatadir  .... Arch-dependent data used by Qt will be installed to 
                            (default PREFIX)
    -plugindir  ...... Plugins will be installed to 
                            (default ARCHDATADIR/plugins)
    -libexecdir  ..... Program executables will be installed to 
                            (default ARCHDATADIR/libexec, ARCHDATADIR/bin for MinGW)
    -importdir  ...... Imports for QML1 will be installed to 
                            (default ARCHDATADIR/imports)
    -qmldir  ......... Imports for QML2 will be installed to 
                            (default ARCHDATADIR/qml)
    -datadir  ........ Arch-independent data used by Qt will be installed to 
                            (default PREFIX)
    -docdir  ......... Documentation will be installed to 
                            (default DATADIR/doc)
    -translationdir  . Translations of Qt programs will be installed to 
                            (default DATADIR/translations)
    -sysconfdir  ..... Settings used by Qt programs will be looked for in 
                            (default PREFIX/etc/xdg)
    -examplesdir  .... Examples will be installed to 
                            (default PREFIX/examples)
    -testsdir  ....... Tests will be installed to 
                            (default PREFIX/tests)

    -hostbindir  .. Host executables will be installed to 
                         (default HOSTPREFIX/bin)
    -hostlibdir  .. Host libraries will be installed to 
                         (default HOSTPREFIX/lib)
    -hostdatadir  . Data used by qmake will be installed to 
                         (default HOSTPREFIX)

Configure options:

 The defaults (*) are usually acceptable. A plus (+) denotes a default value
 that needs to be evaluated. If the evaluation succeeds, the feature is
 included. Here is a short explanation of each option:

 *  -release ........... Compile and link Qt with debugging turned off.
    -debug ............. Compile and link Qt with debugging turned on.
    -debug-and-release . Compile and link two versions of Qt, with and without
                         debugging turned on (Mac only).

    -force-debug-info .. Create symbol files for release builds.

    -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting)

    -opensource ........ Compile and link the Open-Source Edition of Qt.
    -commercial ........ Compile and link the Commercial Edition of Qt.

    -confirm-license ... Automatically acknowledge the license (use with
                         either -opensource or -commercial)

    -no-c++11 .......... Do not compile Qt with C++11 support enabled.
 +  -c++11 ............. Compile Qt with C++11 support enabled.

 *  -shared ............ Create and use shared Qt libraries.
    -static ............ Create and use static Qt libraries.

 *  -process ........... Generate only a top-level Makefile.
    -fully-process ..... Generate Makefiles for the entire Qt tree.
    -dont-process ...... Do not generate any Makefiles.

    -no-largefile ...... Disables large file support.
 +  -largefile ......... Enables Qt to access files larger than 4 GB.

    -no-accessibility .. Do not compile Accessibility support.
                         Disabling accessibility is not recommended, as it will break QStyle
                         and may break other internal parts of Qt.
                         With this switch you create a source incompatible version of Qt,
                         which is unsupported.
 +  -accessibility ..... Compile Accessibility support.

    -no-sql- ... Disable SQL  entirely.
    -qt-sql- ... Enable a SQL  in the Qt SQL module, by default
                         none are turned on.
    -plugin-sql- Enable SQL  as a plugin to be linked to
                         at run time.

                         Possible values for :
                         [ db2 ibase mysql oci odbc psql sqlite sqlite2 tds ]

    -system-sqlite ..... Use sqlite from the operating system.

    -no-javascript-jit . Do not build the JavaScriptCore JIT compiler.
 +  -javascript-jit .... Build the JavaScriptCore JIT compiler.

    -no-qml-debug ...... Do not build the in-process QML debugging support.
 +  -qml-debug ......... Build the QML debugging support.

    -platform target ... The operating system and compiler you are building
                         on (default detected from host system).

                         See the README file for a list of supported
                         operating systems and compilers.

    -no-sse2 ........... Do not compile with use of SSE2 instructions.
    -no-sse3 ........... Do not compile with use of SSE3 instructions.
    -no-ssse3 .......... Do not compile with use of SSSE3 instructions.
    -no-sse4.1 ......... Do not compile with use of SSE4.1 instructions.
    -no-sse4.2 ......... Do not compile with use of SSE4.2 instructions.
    -no-avx ............ Do not compile with use of AVX instructions.
    -no-avx2 ........... Do not compile with use of AVX2 instructions.
    -no-neon ........... Do not compile with use of NEON instructions.
    -no-mips_dsp ....... Do not compile with use of MIPS DSP instructions.
    -no-mips_dspr2 ..... Do not compile with use of MIPS DSP rev2 instructions.

    -qtnamespace   Wraps all Qt library code in 'namespace  {...}'.
    -qtlibinfix   Renames all libQt*.so to libQt*.so.

    -testcocoon ........ Instrument Qt with the TestCocoon code coverage tool.
    -gcov .............. Instrument Qt with the GCov code coverage tool.

    -D  ........ Add an explicit define to the preprocessor.
    -I  ........ Add an explicit include path.
    -L  ........ Add an explicit library path.

 +  -pkg-config ........ Use pkg-config to detect include and library paths. By default,
                         configure determines whether to use pkg-config or not with
                         some heuristics such as checking the environment variables.
    -no-pkg-config ..... Disable use of pkg-config.
    -force-pkg-config .. Force usage of pkg-config (skips pkg-config usability
                         detection heuristic).

    -help, -h .......... Display this information.

Third Party Libraries:

    -qt-zlib ........... Use the zlib bundled with Qt.
 +  -system-zlib ....... Use zlib from the operating system.
                         See http://www.gzip.org/zlib

    -no-mtdev .........  Do not compile mtdev support.
 +  -mtdev ............. Enable mtdev support.

    -no-gif ............ Do not compile GIF reading support.

    -no-libpng ......... Do not compile PNG support.
    -qt-libpng ......... Use the libpng bundled with Qt.
 +  -system-libpng ..... Use libpng from the operating system.
                         See http://www.libpng.org/pub/png

    -no-libjpeg ........ Do not compile JPEG support.
    -qt-libjpeg ........ Use the libjpeg bundled with Qt.
 +  -system-libjpeg .... Use libjpeg from the operating system.
                         See http://www.ijg.org

    -no-freetype ....... Do not compile in Freetype2 support.
    -qt-freetype ....... Use the libfreetype bundled with Qt.
 +  -system-freetype.... Use the libfreetype provided by the system (enabled if -fontconfig is active).
                         See http://www.freetype.org

 *  -no-harfbuzz ....... Do not compile HarfBuzz-NG support.
    -qt-harfbuzz ....... (experimental) Use HarfBuzz-NG bundled with Qt
                         to do text shaping. It can still be disabled
                         by setting QT_HARFBUZZ environment variable to "old".
    -system-harfbuzz ... (experimental) Use HarfBuzz-NG from the operating system
                         to do text shaping. It can still be disabled
                         by setting QT_HARFBUZZ environment variable to "old".

    -no-openssl ........ Do not compile support for OpenSSL.
 +  -openssl ........... Enable run-time OpenSSL support.
    -openssl-linked .... Enabled linked OpenSSL support.

    -qt-pcre ........... Use the PCRE library bundled with Qt.
 +  -system-pcre ....... Use the PCRE library from the operating system.

    -qt-xcb ............ Use xcb- libraries bundled with Qt.
                         (libxcb.so will still be used from operating system).
 +  -system-xcb ........ Use xcb- libraries from the operating system.

    -qt-xkbcommon ...... Use the xkbcommon library bundled with Qt.
 +  -system-xkbcommon .. Use the xkbcommon library from the operating system.

    -no-xinput2 ........ Do not compile XInput2 support.
 *  -xinput2 ........... Compile XInput2 support.

    -no-xcb-xlib........ Do not compile Xcb-Xlib support.
 *  -xcb-xlib........... Compile Xcb-Xlib support.

    -no-glib ........... Do not compile Glib support.
 +  -glib .............. Compile Glib support.

Additional options:

    -make  ....... Add part to the list of parts to be built at make time.
                         (defaults to: libs tools examples)
    -nomake  ..... Exclude part from the list of parts to be built.

    -skip  ..... Exclude an entire module from the build.

    -no-compile-examples ... Install only the sources of examples.

    -no-gui ............ Don't build the Qt GUI module and dependencies.
 +  -gui ............... Build the Qt GUI module and dependencies.

    -no-widgets ........ Don't build the Qt Widgets module and dependencies.
 +  -widgets ........... Build the Qt Widgets module and dependencies.

    -R  ........ Add an explicit runtime library path to the Qt
                         libraries.
    -l  ........ Add an explicit library.

    -no-rpath .......... Do not use the library install path as a runtime
                         library path.
 +  -rpath ............. Link Qt libraries and executables using the library
                         install path as a runtime library path. Equivalent
                         to -R install_libpath

    -continue .......... Continue as far as possible if an error occurs.

    -verbose, -v ....... Print verbose information about each step of the
                         configure process.

    -silent ............ Reduce the build output so that warnings and errors
                         can be seen more easily.

 *  -no-optimized-qmake ... Do not build qmake optimized.
    -optimized-qmake ...... Build qmake optimized.

    -no-nis ............ Do not compile NIS support.
 *  -nis ............... Compile NIS support.

    -no-cups ........... Do not compile CUPS support.
 *  -cups .............. Compile CUPS support.
                         Requires cups/cups.h and libcups.so.2.

    -no-iconv .......... Do not compile support for iconv(3).
 *  -iconv ............. Compile support for iconv(3).

    -no-icu ............ Do not compile support for ICU libraries.
 +  -icu ............... Compile support for ICU libraries.

    -no-fontconfig ..... Do not compile FontConfig support.
 +  -fontconfig ........ Compile FontConfig support.

    -no-strip .......... Do not strip binaries and libraries of unneeded symbols.
 *  -strip ............. Strip binaries and libraries of unneeded symbols when installing.

 *  -no-pch ............ Do not use precompiled header support.
    -pch ............... Use precompiled header support.

    -no-dbus ........... Do not compile the Qt D-Bus module.
 +  -dbus .............. Compile the Qt D-Bus module and dynamically load libdbus-1.
    -dbus-linked ....... Compile the Qt D-Bus module and link to libdbus-1.

    -reduce-relocations ..... Reduce relocations in the libraries through extra
                              linker optimizations (Qt/X11 and Qt for Embedded Linux only;
                              experimental; needs GNU ld >= 2.18).

    -force-asserts ........ Force Q_ASSERT to be enabled even in release builds.

    -device  ............... Cross-compile for device  (experimental)
    -device-option  ... Add device specific options for the device mkspec
                                   (experimental)

    -no-separate-debug-info . Do not store debug information in a separate file.
 *  -separate-debug-info .... Strip debug information into a separate file.

    -no-xcb ............ Do not compile Xcb (X protocol C-language Binding) support.
 *  -xcb ............... Compile Xcb support.

    -no-eglfs .......... Do not compile EGLFS (EGL Full Screen/Single Surface) support.
 *  -eglfs ............. Compile EGLFS support.

    -no-directfb ....... Do not compile DirectFB support.
 *  -directfb .......... Compile DirectFB support.

    -no-linuxfb ........ Do not compile Linux Framebuffer support.
 *  -linuxfb ........... Compile Linux Framebuffer support.

    -no-kms ............ Do not compile KMS support.
 *  -kms ............... Compile KMS support (Requires EGL).

    -qpa  ......... Sets the default QPA platform (e.g xcb, cocoa, windows).

    -xplatform target ... The target platform when cross-compiling.

    -sysroot  ...... Sets  as the target compiler's and qmake's sysroot and also sets pkg-config paths.
    -no-gcc-sysroot ..... When using -sysroot, it disables the passing of --sysroot to the compiler

    -no-feature- Do not compile in .
    -feature- .. Compile in . The available features
                          are described in src/corelib/global/qfeatures.txt

    -qconfig local ...... Use src/corelib/global/qconfig-local.h rather than the
                          default (full).

    -qreal [double|float] typedef qreal to the specified type. The default is double.
                          Note that changing this flag affects binary compatibility.

    -no-opengl .......... Do not support OpenGL.
    -opengl  ....... Enable OpenGL support
                          With no parameter, this will attempt to auto-detect
                          OpenGL ES 2, or regular desktop OpenGL.
                          Use es2 for  to override auto-detection.

 *  -no-system-proxies .. Do not use system network proxies by default.
    -system-proxies ..... Use system network proxies by default.

    -no-warnings-are-errors Make warnings be treated normally
    -warnings-are-errors  Make warnings be treated as errors
                          (enabled if -developer-build is active)

QNX/Blackberry options:

    -no-slog2 .......... Do not compile with slog2 support.
    -slog2 ............. Compile with slog2 support.

    -no-pps ............ Do not compile with pps support.
    -pps ............... Compile with pps support.

MacOS/iOS options:

    -Fstring ........... Add an explicit framework path.
    -fw string ......... Add an explicit framework.

 *  -framework ......... Build Qt as a series of frameworks and
                         link tools against those frameworks.
    -no-framework ...... Do not build Qt as a series of frameworks.

    -sdk  ......... Build Qt using Apple provided SDK . The argument should be
                         one of the available SDKs as listed by 'xcodebuild -showsdks'.
                         Note that the argument applies only to Qt libraries and applications built
                         using the target mkspec - not host tools such as qmake, moc, rcc, etc.

Android options:

    -android-sdk path .............. The Android SDK root path.
                                     (default $ANDROID_SDK_ROOT)

    -android-ndk path .............. The Android NDK root path.
                                     (default $ANDROID_NDK_ROOT)

    -android-ndk-platform .......... Sets the android platform
                                     (default android-9)

    -android-ndk-host .............. Sets the android NDK host (linux-x86, linux-x86_64, etc.)
                                     (default $ANDROID_NDK_HOST)

    -android-arch .................. Sets the android architecture (armeabi, armeabi-v7a, x86, mips)
                                     (default armeabi-v7a)

    -android-toolchain-version ..... Sets the android toolchain version
                                     (default 4.8)

Desktop版

./configure -static -debug-and-release -nomake examples  -linuxfb -prefix /usr/local/Qt-Desktop-5.2.1

配置后的 summary 如下:

   Configure summary

Build type:    linux-g++ (x86_64, CPU features: mmx sse sse2)
Platform notes:

            - Also available for Linux: linux-kcc linux-icc linux-cxx

Build options:
  Configuration .......... accessibility audio-backend avx avx2 c++11 clock-gettime clock-monotonic compile_examples concurrent egl eglfs evdev eventfd fontconfig full-config getaddrinfo getifaddrs gif glib gtk2 gtkstyle iconv icu inotify ipv6ifname jpeg large-config largefile linuxfb medium-config minimal-config mremap nis no-harfbuzz opengl openssl pcre png posix_fallocate precompile_header qpa qpa reduce_exports reduce_relocations release rpath small-config sse2 sse3 sse4_1 sse4_2 ssse3 static system-freetype system-jpeg system-png system-zlib xcb xcb-glx xcb-render xcb-sm xcb-xlib xinput2 xkbcommon-qt xlib xrender 
  Build parts ............ libs tools
  Mode ................... release
  Using C++11 ............ yes
  Using PCH .............. yes
  Target compiler supports:
    SSE2/SSE3/SSSE3 ...... yes/yes/yes
    SSE4.1/SSE4.2 ........ yes/yes
    AVX/AVX2 ............. yes/yes

Qt modules and options:
  Qt D-Bus ............... no
  Qt Concurrent .......... yes
  Qt GUI ................. yes
  Qt Widgets ............. yes
  JavaScriptCore JIT ..... yes (To be decided by JavaScriptCore)
  QML debugging .......... yes
  Use system proxies ..... no

Support enabled for:
  Accessibility .......... yes
  ALSA ................... no
  CUPS ................... no
  FontConfig ............. yes
  FreeType ............... system
  Iconv .................. yes
  ICU .................... yes
  Image formats: 
    GIF .................. yes (in QtGui, using bundled copy)
    JPEG ................. yes (in QtGui, using system library)
    PNG .................. yes (in QtGui, using system library)
  Glib ................... yes
  GTK theme .............. yes
  Large File ............. yes
  mtdev .................. no
  Networking: 
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    OpenSSL .............. yes (loading libraries at run-time)
  NIS .................... yes
  OpenGL ................. desktop
  OpenVG ................. no
  PCRE ................... yes (bundled copy)
  pkg-config ............. yes 
  PulseAudio ............. no
  QPA backends: 
    DirectFB ............. no
    EGLFS ................ yes
    KMS .................. no
    LinuxFB .............. yes
    XCB .................. yes (system library)
      MIT-SHM ............ yes
      Xcb-Xlib ........... yes
      Xcursor ............ yes (loaded at runtime)
      Xfixes ............. yes (loaded at runtime)
      Xi ................. no
      Xi2 ................ yes
      Xinerama ........... yes (loaded at runtime)
      Xrandr ............. yes (loaded at runtime)
      Xrender ............ yes
      XKB ................ yes
      XShape ............. yes
      XSync .............. yes
      XVideo ............. yes
  Session management ..... yes
  SQL drivers: 
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. no
    PostgreSQL ........... no
    SQLite 2 ............. no
    SQLite ............... yes (plugin, using bundled copy)
    TDS .................. no
  udev ................... no
  xkbcommon .............. yes (bundled copy)
  zlib ................... yes (system library)


WARNING: Using static linking will disable the use of dynamically
loaded plugins. Make sure to import all needed static plugins,
or compile needed modules into the library.

NOTE: libxkbcommon 0.2.0 (or higher) not found on the system, will use 
the bundled version from 3rd party directory.
Info: creating super cache file /home/liu/sfw/qt-everywhere-opensource-src-5.2.1/.qmake.super

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Qt-Desktop-5.2.1

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

这里虽然使用了 -linuxfb 标识, 但 Ubuntu 系统 貌似使用的 xcb , 所以使用 linuxfb 运行 Qt 程序会出错, 如下所示:

$ ./HelloWorld -platform linuxfb
OK, I'm running in Xilinx Zynq!
This application failed to start because it could not find or load the Qt platform plugin "linuxfb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
已放弃 (核心已转储)

./HelloWorld -platform EGLFS
OK, I'm running in Xilinx Zynq!
This application failed to start because it could not find or load the Qt platform plugin "eglfs".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
已放弃 (核心已转储)


$  ./HelloWorld -platform xcb
OK, I'm running in Xilinx Zynq!
OK, I'm running in Xilinx Zynq!---

使用 ./HelloWorld -platform xcb./HelloWorld 效果一致, 如下:

Ubuntu 14.04 LTS + Qt 5.2.1 源码编译搭建环境_第1张图片

嵌入式ARM版

./configure -prefix /usr/local/Qt/Embedded/5.2.1 \
-device linux-arm-xilinx-zynq-g++ \
-device-option CROSS_COMPILE=/home/liu/sfw/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi- \
-release \
-opensource \
-confirm-license \
-no-c++11 \
-shared \
-force-pkg-config \
-qt-libpng \
-qt-libjpeg \
-qt-freetype \
-qt-harfbuzz \
-qt-xcb \
-qt-xkbcommon \
-xcb-xlib \
-nomake examples \
-no-compile-examples \
-gui \
-widgets \
-xcb \
-qreal float \
-verbose 
./configure -prefix /usr/local/Qt/Embedded/5.2.1 \
-release \
-opensource \
-confirm-license \
-no-c++11 \
-shared \
-force-pkg-config \
-qt-libpng \
-qt-libjpeg \
-qt-freetype \
-qt-harfbuzz \
-no-xinput2 \
-no-xcb-xlib \
-nomake examples \
-no-compile-examples \
-gui \
-widgets \
-no-xcb \
-linuxfb \
-qreal float \
-verbose 
# Sourcery CodeBench Lite for Xilinx GNU Linux 
export ARCH=ARM
export PATH=$PATH:/home/liu/sfw/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

export LD_LIBRARY_PATH=/home/liu/sfw/local:$LD_LIBRARY_PATH
export HOST=arm-xilinx-linux-gnueabi

export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/home/liu/sfw/local/lib/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=$PKG_CONFIG_SYSROOT_DIR:/home/liu/local/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/liu/sfw/local/lib/pkgconfig

#export PKG_CONFIG_PATH=/media/liu/ROOTFS/usr/lib/pkgconfig:$PKG_CONFIG_PATH

export XCBPROTO_LIBS=/home/liu/sfw/local:$XCBPROTO_LIBS

export QTDIR=/usr/local/Qt/Desktop/5.2.1
export QT_QPA_FONTDIR=$QTDIR/lib/fonts 
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/ 
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 
./configure --prefix=/Qt-5.2.1 -no-c++11 -no-qml-debug -xplatform linux-arm-xilinx-zynq-g++ -qt-freetype -no-opengl -qt-pcre -nomake tests -nomake examples -sysroot /home/liu/sfw/local/ -v 

http://blog.csdn.net/tracing/article/details/49951633

file
strings
ldd

交叉编译后的 ARM 版程序 在 PC 机上的运行结果

$ ./HelloWorld 
bash: ./HelloWorld: cannot execute binary file: 可执行文件格式错误
$ 
$ file HelloWorld 
HelloWorld: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
$ 
$ ldd HelloWorld 
    不是动态可执行文件
$ 
$ readelf -d HelloWorld | grep NEEDED
 0x00000001 (NEEDED)                     共享库:[libQt5Widgets.so.5]
 0x00000001 (NEEDED)                     共享库:[libQt5Gui.so.5]
 0x00000001 (NEEDED)                     共享库:[libQt5Core.so.5]
 0x00000001 (NEEDED)                     共享库:[libpthread.so.0]
 0x00000001 (NEEDED)                     共享库:[libstdc++.so.6]
 0x00000001 (NEEDED)                     共享库:[libm.so.6]
 0x00000001 (NEEDED)                     共享库:[libgcc_s.so.1]
 0x00000001 (NEEDED)                     共享库:[libc.so.6]
$ 

Qt交叉编译移植问题实例

交叉编译后的 ARM 版程序 移植到 ARM 上的运行结果

root@localhost:/home# ./HelloWorld 
root@localhost:/home# 
root@localhost:/home# file HelloWorld 
HelloWorld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
root@localhost:/home# 
root@localhost:/home# 
root@localhost:/home# readelf -d HelloWorld | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libQt5Widgets.so.5]
 0x00000001 (NEEDED)                     Shared library: [libQt5Gui.so.5]
 0x00000001 (NEEDED)                     Shared library: [libQt5Core.so.5]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
root@localhost:/home# 

PC 版程序在 PC 上的运行结果


$ ./HelloWorld 
OK, I'm running in Xilinx Zynq!
Hello!
Over!
OK, I'm running in Xilinx Zynq!---
Over!
$ 
$ ldd HelloWorld 
    linux-vdso.so.1 =>  (0x00007ffe921ec000)
    libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f26d5ef3000)
    libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f26d584d000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f26d5549000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f26d5333000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f26d4f6e000)
    libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f26d4921000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f26d4703000)
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f26d44b2000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f26d41aa000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f26d3e75000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f26d3b6f000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f26d3956000)
    libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007f26d354f000)
    libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007f26d31d6000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f26d2fd2000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f26d2dca000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f26d671c000)
    libpng12.so.0 => /usr/local/lib/libpng12.so.0 (0x00007f26d2ba3000)
    libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f26d294e000)
    libGL.so.1 => /usr/lib/nvidia-346/libGL.so.1 (0x00007f26d25f6000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f26d23ee000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f26d21b0000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f26d1f91000)
    libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007f26d0724000)
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f26d0481000)
    libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f26d025b000)
    libnvidia-tls.so.346.82 => /usr/lib/nvidia-346/tls/libnvidia-tls.so.346.82 (0x00007f26d0058000)
    libnvidia-glcore.so.346.82 => /usr/lib/nvidia-346/libnvidia-glcore.so.346.82 (0x00007f26cd37a000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f26cd168000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f26ccf64000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f26ccd5e000)
$ readelf -d HelloWorld | grep NEEDED
 0x0000000000000001 (NEEDED)             共享库:[libQt5Widgets.so.5]
 0x0000000000000001 (NEEDED)             共享库:[libQt5Core.so.5]
 0x0000000000000001 (NEEDED)             共享库:[libstdc++.so.6]
 0x0000000000000001 (NEEDED)             共享库:[libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             共享库:[libc.so.6]

PC 版程序在 ARM 上的运行结果

root@localhost:/home/c# 
root@localhost:/home/c# ./HelloWorld 
-bash: ./HelloWorld: cannot execute binary file
root@localhost:/home/c# 
root@localhost:/home/c# file HelloWorld 
HelloWorld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xa895531919379c0e9430d50d5068677ebd2a774f, not stripped
root@localhost:/home/c# 
root@localhost:/home/c# 
root@localhost:/home/c# readelf -d HelloWorld | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libQt5Widgets.so.5]
 0x0000000000000001 (NEEDED)             Shared library: [libQt5Core.so.5]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
root@localhost:/home/c# 

可是 下面的 led-test 程序运行正常:

root@localhost:/home# ./led-test 
[usr_led1] Get trigger: 'none'
[usr_led1] Set trigger to 'none'
[usr_led2] Get trigger: 'none'
[usr_led2] Set trigger to 'none'
[   led_r] Get trigger: 'heartbeat'
[   led_r] Set trigger to 'none'
[   led_g] Get trigger: 'heartbeat'
[   led_g] Set trigger to 'none'
[   led_b] Get trigger: 'heartbeat'
[   led_b] Set trigger to 'none'
^C[usr_led1] Set trigger to 'none'
[usr_led2] Set trigger to 'none'
[   led_r] Set trigger to 'heartbeat'
[   led_g] Set trigger to 'heartbeat'
[   led_b] Set trigger to 'heartbeat'
root@localhost:/home# file led-test 
led-test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
root@localhost:/home# ldd led-test 
    not a dynamic executable
root@localhost:/home# readelf -d led-test | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
root@localhost:/home# 

目标机上编译动态库


root@localhost:/home/c# gcc -shared -fPIC caculate.c -o libcac.so
root@localhost:/home/c# gcc main.c -o main -L ./ -lcac
root@localhost:/home/c# ./main
./main: error while loading shared libraries: libcac.so: cannot open shared object file: No such file or directory
root@localhost:/home/c# ls
HelloWorld  caculate.c~  caculate.h~  main    main.c~  testgtk.c
caculate.c  caculate.h   libcac.so    main.c  mainpc
root@localhost:/home/c# file libcac.so 
libcac.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x8611c5e0a1dd10e2e05a95b23a840b72c50f45dc, not stripped
root@localhost:/home/c# file main
main: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0xeee4bf52cdf3ec37387ac960b9d0f90313add90c, not stripped
root@localhost:/home/c# ldd main
    libcac.so => not found
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e4a000)
    /lib/ld-linux-armhf.so.3 (0xb6f40000)
root@localhost:/home/c# su
root@localhost:/home/c# gcc -shared -fPIC caculate.c -o libcac.so
root@localhost:/home/c# gcc main.c -o main -L ./ -lcac
root@localhost:/home/c# ./main
./main: error while loading shared libraries: libcac.so: cannot open shared object file: No such file or directory
root@localhost:/home/c# ls
HelloWorld  caculate.c~  caculate.h~  main    main.c~  testgtk.c
caculate.c  caculate.h   libcac.so    main.c  mainpc
root@localhost:/home/c# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/c/
root@localhost:/home/c# ls
HelloWorld  caculate.c~  caculate.h~  main    main.c~  testgtk.c
caculate.c  caculate.h   libcac.so    main.c  mainpc
root@localhost:/home/c# ./main
20 + 10 = 30
20 - 10 = 10
20 / 10 = 2
20 * 10 = 200
root@localhost:/home/c# cd ..

你可能感兴趣的:(嵌入式)