到 Qt 官网下载合适的 Qt 版本,地址:http://download.qt-project.org/archive/qt/

1.环境搭建:

1.安装automake、libtool 和主机上的 Qt 工具:

$ sudo apt-get install automake autoconf libtool m4
$ sudo apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev
$ sudo apt-get install libqt4-core libqt4-dev libqt4-webkit qt4-demos

2.搭建交叉编译环境:
环境搭建很简单,只要把交叉编译工具链解压后,在/etc/profile文件最后一行处添加环境变量,系统启动时会自动设置。

解压后进入目录,ls bin/可以看到aarch64-linux-gnu-gcc、aarch64-linux-gnu-g++等编译器。

[~/qtArm64Toolchain/Ambarella_Linaro_Toolchain_2016.02_For_S5/linaro-aarch64-2016.02-gcc5. root@jz4775dev]
[root@jz4775dev]# ls
aarch64-linux-gnu bin include lib lib64 libexec share
[~/qtArm64Toolchain/Ambarella_Linaro_Toolchain_2016.02_For_S5/linaro-aarch64-2016.02-gcc5. root@jz4775dev]
[root@jz4775dev]# ls bin/
aarch64-linux-gnu-addr2line aarch64-linux-gnu-cpp aarch64-linux-gnu-gcc-ar aarch64-linux-gnu-gdb aarch64-linux-gnu-objcopy aarch64-linux-gnu-readelf
aarch64-linux-gnu-ar aarch64-linux-gnu-elfedit aarch64-linux-gnu-gcc-nm aarch64-linux-gnu-gprof aarch64-linux-gnu-objdump aarch64-linux-gnu-size
aarch64-linux-gnu-as aarch64-linux-gnu-g++ aarch64-linux-gnu-gcc-ranlib aarch64-linux-gnu-ld aarch64-linux-gnu-pkg-config aarch64-linux-gnu-strings
aarch64-linux-gnu-c++ aarch64-linux-gnu-gcc aarch64-linux-gnu-gcov aarch64-linux-gnu-ld.bfd aarch64-linux-gnu-pkg-config-real aarch64-linux-gnu-strip
aarch64-linux-gnu-c++filt aarch64-linux-gnu-gcc-5.3. aarch64-linux-gnu-gcov-tool aarch64-linux-gnu-nm aarch64-linux-gnu-ranlib 
[root@jz4775dev]# vim /etc/profile

在最后一行添加:

export PATH=/root/qtArm64Toolchain/Ambarella_Linaro_Toolchain_2016.02_For_S5/linaro-aarch64-2016.02-gcc5./bin:$PATH

2.编译安装Qt4.7.3

把qt-everywhere-opensource-src-4.7.3.tar.gz拷贝到/opt 目录下,使用下面command解压:

tar -xvf qt-everywhere-opensource-src-4.7..tar.gz

并在/opt目录下新建目录qt-4.7.3-arm64(qt-4.7.3-arm64是编译完成后的安装目录):

mkdir qt-4.7.-arm64

然后进入qt-everywhere-opensource-src-4.7.3目录:
a.修改mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf文件如下:

  #
# qmake configuration for building with arm-none-linux-gnueabi-g++
# include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf) # modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++ # modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_STRIP = aarch64-linux-gnu-strip load(qt_config)

b.执行configure生成Makefile文件,命令如下:

./configure -opensource -prefix /opt/qt-4.7.-arm64 -xplatform qws/linux-arm-gnueabi-g++ -embedded armv8 -release -webkit -no-cups -qt-zlib -qt-libjpeg -qt-libmng -qt-libpng -depths all -qt-gfx-linuxfb -qt-g
fx-transformed -no-gfx-qvfb -qt-gfx-vnc -qt-gfx-multiscreen -qt-kbd-tty -no-openssl -no-phonon -no-phonon-backend -no-nas-sound -no-exceptions -svg -no-qt3support -no-multimedia -no-xmlpatterns -no-pch -con
firm-license

配置成功显示如下:

NOTICE: Atomic operations are not yet supported for this
architecture. Qt will use the 'generic' architecture instead, which uses a
single pthread_mutex_t to protect all atomic operations. This
implementation is the slow (but safe) fallback implementation
for architectures Qt does not yet support. Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /opt/qt-4.7.-arm64 To reconfigure, run 'make confclean' and 'configure'.

然后:

make

注意:

1. qt4.7.3 configure时要加上-embedded armv8参数,armv8是arm芯片的架构(arm9对应armv5,arm11对应armv6,cortex-a8和cortex-a9对应armv7),不然会出现以下情况:

You have not explicitly asked to use pkg-config and are cross-compiling.
pkg-config will not be used to automatically query cflag/lib parameters for
dependencies This is the Qt for Linux/X11 Open Source Edition. You are licensed to use this software under the terms of
the Lesser GNU General Public License (LGPL) versions 2.1.
You are also licensed to use this software under the terms of
the GNU General Public License (GPL) versions . You have already accepted the terms of the license. Creating qmake. Please wait...
g++ -c -o option.o -m64 -pipe -DQMAKE_OPENSOURCE_EDITION -I. -Igenerators -Igenerators/unix -Igenerators/win32 -Igenerators/mac -Igenerators/symbian -I/opt/qt-everywhere-opensource-src-4.7./include -I/opt/qt-everywhere-opensource-src-4.7./include/QtCore -I/opt/qt-everywhere-opensource-src-4.7./src/corelib/global -I/opt/qt-everywhere-opensource-src-4.7./src/corelib/xml -I/opt/qt-everywhere-opensource-src-4.7./tools/shared -DQT_NO_PCRE -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_STL -DQT_NO_COMPRESS -I/opt/qt-everywhere-opensource-src-4.7./mkspecs/linux-g++- -DHAVE_QCONFIG_CPP -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT option.cpp
g++ -o "/opt/qt-everywhere-opensource-src-4.7.3/bin/qmake" project.o property.o main.o makefile.o unixmake2.o unixmake.o mingw_make.o option.o winmakefile.o projectgenerator.o meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o borland_bmake.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_objectmodel.o symmake.o initprojectdeploy_symbian.o symmake_abld.o symmake_sbsv2.o symbiancommon.o registry.o epocroot.o qtextcodec.o qutfcodec.o qstring.o qtextstream.o qiodevice.o qmalloc.o qglobal.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfile.o qfsfileengine_unix.o qfsfileengine_iterator_unix.o qfsfileengine.o qfsfileengine_iterator.o qregexp.o qvector.o qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o qsettings.o qlibraryinfo.o qvariant.o qvsnprintf.o qlocale.o qlinkedlist.o qurl.o qnumeric.o qcryptographichash.o qxmlstream.o qxmlutils.o -m64
Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /opt/qt-everywhere-opensource-src-4.7./mkspecs/qws/linux-arm-gnueabi-g++.
 

2.执行make后可能会报错,不同的编译器版本出现的错误不一样,本人刚开始使用 ,aarch-linux-gnu 7.2.1版本编译器,出现如下错误:

../../include/QtCore/../../src/corelib/tools/qmap.h: In instantiation of ‘T& QMap<Key, T>::operator[](const Key&) [with Key = int; T = inotify_event]’:
io/qfilesystemwatcher_inotify.cpp::: required from here
../../include/QtCore/../../src/corelib/tools/qmap.h::: error: value-initialization of incomplete type ‘char []’
node = node_create(d, update, akey, T());
^~~

google了一波并没有找到解决办法,个人感觉可能是qt代码太老的关系,好多东西到现在的Qt5.11都已经弃用,编译器太新导致出错,之前用aarch64-linux-gnu 7.2.1编译qt5.5.1并没有出现这个错误,所以决定换个编译器的版本尝试一下。改用aarch64-linux-gnu 5.3.1版本后,没有出现这个错误。

但是在后面编译时出现了新的错误,如下:

runtime/JSValue.h: In constructor 'JSC::JSValue::JSValue(JSC::JSCell*)':
runtime/JSValue.h::: error: cast from 'JSC::JSCell*' to 'int32_t {aka int}' loses precision [-fpermissive]
u.asBits.payload = reinterpret_cast<int32_t>(ptr);
^
runtime/JSValue.h: In constructor 'JSC::JSValue::JSValue(const JSC::JSCell*)':
runtime/JSValue.h::: error: cast from 'JSC::JSCell*' to 'int32_t {aka int}' loses precision [-fpermissive]
u.asBits.payload = reinterpret_cast<int32_t>(const_cast<JSCell*>(ptr));
^
make[]: *** [.obj/release-static-emb-armv8/JSBase.o] Error
make[]: Leaving directory `/opt/qt-everywhere-opensource-src-4.7./src/3rdparty/webkit/JavaScriptCore'
make: *** [sub-javascriptcore-make_default-ordered] Error

google了一下,原来是Qt4.7的一个Bug,国外大胸弟们也是一顿操作,然而并没有给出具体的解决办法,想到在64位arm上跑,所以把494和506行的int32_t改成int64_t编译通过了,但是编译完成后并没有生成webkit的动态库,很是无语。这个错误就是编译webkit第三方库的时候出现的,为什么编译通过后没有libQtWebKit.so.4.7.3呢!

既然没有生成webkit库,那就在configure后面加上参数 -webkit,指明编译这个库。configure后生成新的Makefile,make继续填坑。编译过程中又出现了这个错误。打开JSValue.h文件发现是修改过的int64_t,执行command:

[root@jz4775dev]# find ./ -name JSValue.h
./src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSValue.h
./src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.h
./src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSValue.h

原来有三个!

一个个来查看:

[root@jz4775dev]# vim ./src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSValue.h

   #ifndef WebCore_FWD_JSValue_h
#define WebCore_FWD_JSValue_h
#include <JavaScriptCore/JSValue.h>
#endif

不是这个;

[root@jz4775dev]# vim ./src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.h

     inline JSValue::JSValue(JSCell* ptr)
{
if (ptr)
u.asBits.tag = CellTag;
else
u.asBits.tag = EmptyValueTag;
u.asBits.payload = reinterpret_cast<int32_t>(ptr);
#if ENABLE(JSC_ZOMBIES)
ASSERT(!isZombie());
#endif
} inline JSValue::JSValue(const JSCell* ptr)
{
if (ptr)
u.asBits.tag = CellTag;
else
u.asBits.tag = EmptyValueTag;
u.asBits.payload = reinterpret_cast<int32_t>(const_cast<JSCell*>(ptr));
#if ENABLE(JSC_ZOMBIES)
ASSERT(!isZombie());
#endif
}

就是你了,把int32_t改成int64_t后继续编译,编译顺利完成。

这时在 "ls lib/" 查看:

[root@jz4775dev]# ls lib/
fonts libQtCore.so libQtDeclarative.so.4.7 libQtNetwork.la libQtScript.la libQtScriptTools.so.4.7 libQtSvg.so libQtWebKit.la libQtXml.so
libphonon.la libQtCore.so. libQtDeclarative.so.4.7. libQtNetwork.prl libQtScript.prl libQtScriptTools.so.4.7. libQtSvg.so. libQtWebKit.prl libQtXml.so.
libphonon.prl libQtCore.so.4.7 libQtGui.la libQtNetwork.so libQtScript.so libQtSql.la libQtSvg.so.4.7 libQtWebKit.so libQtXml.so.4.7
libpvrQWSWSEGL.prl libQtCore.so.4.7. libQtGui.prl libQtNetwork.so. libQtScript.so. libQtSql.prl libQtSvg.so.4.7. libQtWebKit.so. libQtXml.so.4.7.
libQAxContainer.prl libQtDBus.la libQtGui.so libQtNetwork.so.4.7 libQtScript.so.4.7 libQtSql.so libQtTest.la libQtWebKit.so.4.7 pkgconfig
libQAxServer.prl libQtDBus.prl libQtGui.so. libQtNetwork.so.4.7. libQtScript.so.4.7. libQtSql.so. libQtTest.prl libQtWebKit.so.4.7. README
libQt3Support.la libQtDeclarative.la libQtGui.so.4.7 libQtOpenGL.la libQtScriptTools.la libQtSql.so.4.7 libQtTest.so libQtXml.la
libQt3Support.prl libQtDeclarative.prl libQtGui.so.4.7. libQtOpenGL.prl libQtScriptTools.prl libQtSql.so.4.7. libQtTest.so. libQtXmlPatterns.la
libQtCore.la libQtDeclarative.so libQtMultimedia.la libQtOpenVG.la libQtScriptTools.so libQtSvg.la libQtTest.so.4.7 libQtXmlPatterns.prl
libQtCore.prl libQtDeclarative.so. libQtMultimedia.prl libQtOpenVG.prl libQtScriptTools.so. libQtSvg.prl libQtTest.so.4.7. libQtXml.prl

libQtWebKit.so.4.7.3 有了,嗯...美滋滋!

然后执行command:

make install

就会把生成的库等相干东西安装在/opt/qt-4.7.3-arm64目录下。至此,交叉编译告一段落。下面的任务就是移植到arm开发板上。

3.移植到arm开发板上

方法很简单,把qt-4.7.3-arm64打包,生成qt-4.7.3-arm64.tgz。把它放到开发板的上,放在哪你自己决定,我是同样放在/opt目录下,然后解压。

编辑开发板上 /etc/profile文件,在最后一行添加如下环境变量:

#
# Configure the runtime environment for Qt
#
export QTDIR=/opt/qt-4.7.-arm64
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_SIZE=800x400
export QWS_DISPLAY=LinuxFb:/dev/fb0(这个根据开发板而定)

添加完后wq保存退出,执行command:

source /etc/profile

使修改生效,然后你就可以在你的开发板上运行你的qtdemo啦...

localhost:/opt/qt-4.7.-arm64/examples/webkit # file fancybrowser/fancybrowser
fancybrowser/fancybrowser: ELF -bit LSB executable, ARM aarch64, version (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so., for GNU/Linux 3.7., BuildID[sha1]=68c7b85ea380524f07bcc49da63dff2505ddfb57, stripped 查看demo的可执行文件的类型,基于ARM aarch64,正确的。

《题外篇》

如果想要实现触摸功能,需要编译tslib.

4.编译tslib

Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。

到 github 下载 tslib最新版,地址:https://github.com/libts/tslib.git

下载后文件名为tslib-master.zip。

1.建立工作目录
cd /opt
mkdir tslib
2.编译安装tslib

将下载的tslib源码复制到/opt目录下,并解压:

unzip tslib-master.zip
cd tslib-master
3.编译

配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到 /opt/tslib:

./autogen.sh
./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=aarch64-linux-gnu --prefix=/opt/tslib ac_cv_func_malloc_0_nonnull=yes

编译安装:

make
make install

完成后,tslib会按安装到主机 /opt/tslib 目录下。 进入下一步之前,先将主机中 /opt/tslib/etc/ts.conf 文件第二行“#module_raw input”的注释去掉,变为“module_raw input”,注意一定要顶格(哥哥编译好时第二行的注释符#已经去掉了)。

重新编译Qt-4.7.3

这时qmake.conf文件修改为如下:

  #
# qmake configuration for building with arm-none-linux-gnueabi-g++
# include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf) # modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc -lts
QMAKE_CXX = aarch64-linux-gnu-g++ -lts
QMAKE_LINK = aarch64-linux-gnu-g++ -lts
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++ -lts # modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_STRIP = aarch64-linux-gnu-strip load(qt_config)

configure也要添加新的参数:

-no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/opt/tslib/include -L/opt/tslib/lib -confirm-license

然后再make && make install

编译好后把qt-4.7.3-arm64和tslib同时拷贝到开发板/opt下。 编辑/etc/profile添加环境变量:

export QTDIR=/opt/qt-4.7.-arm64
export T_ROOT=/opt/tslib
export PATH=$T_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
 

aarch64-linux-gnu交叉编译Qt4.7.3的更多相关文章

  1. Linux编译移植Qt4的环境_在OMAPL138平台

    Linux编译Qt4的环境_OMAPL138 手里有一块创龙OMAPL138的板子,我要在上面成功移植Qt环境和触摸屏幕,这是我第二次进行Linux的Qt环境移植,发现了很多问题,需要重新整理. 我编 ...

  2. 用TensorRT针对AArch64用户的交叉编译示例

    用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...

  3. alias function varibales in Linux/GNU and Mac alias命令细说

    细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化 ...

  4. How-to Install VMware Tools on Debian Stretch 9 32/64bit Linux+GNU

    在虚拟机VMWARE上安装debian9 安装vmwaretools时候遇到问题 询问我IFCONFIG安装在哪里? 新版的debian不知道是用户权限问题还是使用了其他网络配置工具 vmwareto ...

  5. 关于Linux的交叉编译环境配置中的问题

    Linux的交叉编译arm-linux-gcc搭建时,安装结束却无法查看版本.输入以下命令查看Ubuntu的版本: uname -a 可以看到此Ubuntu为64位16.04.1版本,所以需要下载32 ...

  6. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  7. Linux下交叉编译gdb和gdbserver

    平台:tq2440 GCC:  gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) 这里过程中参考了下面两篇博文: http://blog.csdn.ne ...

  8. Linux ARM交叉编译工具链制作过程【转】

    本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...

  9. Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

    交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gd ...

随机推荐

  1. Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

    一.错误信息 java.lang.reflect.InvocationTargetException    at sun.reflect.NativeMethodAccessorImpl.invoke ...

  2. [Python3网络爬虫开发实战] 2.5-代理的基本原理

    我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到“您的 ...

  3. zabbix源码安装后,设置为服务启动和关闭

    zabbix源码安装,使用service启动与关闭服务 1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本,在/usr/local/src/zabbix ...

  4. 源码学习-String类

    最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...

  5. python 连接sqlserver: pymssql

    停了一个月,终于还是把这个做了,工作需要!!!在装pymssql时,一直报错,确定了要先装freetds: 1. 安装freetds时报错,搜索到要先进行如下操作: brew unlink freet ...

  6. Adversarial Auto-Encoders

    目录 Another Approach: q(z)->p(z) Intuitively comprehend KL(p|q) Minimize KL Divergence How to comp ...

  7. 当java web项目部署到服务器上时,无法将图片等媒体文件保存到服务器的最终奥义

    今天,我在部署web项目至云服务器上(Tomcat8.0)时,突然发现我的应用,无法上传图片,视频等多媒体文件了,一再检查自己的代码逻辑没有问题之后,逐一排查,首先想到的就是看一下控制台打印的日志,日 ...

  8. windows事件查看器

    如果一个软件发生异常,软件本身没有提示异常信息, 需要从事件查看器中查看产生的错误事件 运行输入eventvwr或者win + X

  9. JavaEE JDBC 读写LOB大对象

    JDBC 读写LOB大对象 @author ixenos LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其他数据, 在SQL中,二进制(字节型)大对象称为BLOB,字符型大 ...

  10. Spring Data JPA 中常用注解

    一.java对象与数据库字段转化 1.@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 2.@Table:设置实体类在数据库所对应的表名 3.@Id:标识类里所在变量为主 ...