配置选项
+ 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)
./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
效果一致, 如下:
./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
$ ./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]
$
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#
$ ./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]
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 ..