QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 13944|回复: 3
打印 上一主题 下一主题

[其他资源] matlab生成exe文件(总结)

[复制链接]
字体大小: 正常 放大
我能 实名认证    中国数模人才认证   

24

主题

8

听众

2288

积分

升级  9.6%

  • TA的每日心情
    慵懒
    2023-4-27 19:48
  • 签到天数: 321 天

    [LV.8]以坛为家I

    社区QQ达人

    群组中国矿业大学数模培训

    群组数学建模培训课堂2

    群组2011年第一期数学建模

    群组学术交流B

    跳转到指定楼层
    1#
    发表于 2012-11-2 13:08 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    matlab功能相当的强大,写好了m文件但是其他很多电脑没有安装matalb,不能运行,所以我们想找到生成exe的可执行文件,我么就想到了和c语言c++进行混合编程,在windows下生成exe文件,matlab和vs等的文章很少大都是那几个 ,我自己在网上找了些东西总结了下:
    6 v& w' s9 I1 R& U; o- J3 o6 H) [2 V) d
    1.Matlab环境设置
    要建立独立运行的C应用程序,系统中需要安装MatlabMatlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
    ( ~4 j' l( Z& X
    Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
    " T: e4 D3 R1 h5 ^; `
    虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
    Matlab Command Window 下输入命令
    mbuild – setup
    操作过程如下图:
                                  
    然后输入命令
    mex – setup
    以类似的方法配置编译器。Matlab 的配置完成。
    2.VS环境设置
    1)设置Include Library 目录
    项目右键->属性->VC++目录->包含目录:添加
    <MATLAB>\R2010b\extern\include\win64
    <MATLAB>\R2010b\extern\include\
    项目右键->属性->VC++目录->库目录:添加
    <MATLAB>\R2010b\extern\lib\win32\microsoft
    <MATLAB>\R2010b\extern\lib\win64\microsoft
    截图(部分):
    2)设置工程目录
    项目右键->属性->C/C++->常规->附件包含目录:添加
    <MATLAB>\R2010b\extern\include\win64
    <MATLAB>\R2010b\extern\include\
    项目右键->属性->链接器->常规:添加
    <MATLAB>\R2010b\extern\lib\win32\microsoft
    <MATLAB>\R2010b\extern\lib\win64\microsoft
    项目右键->属性->链接器->输入->附件依赖性:添加
    libeng.lib7 M0 O1 c; N$ P+ q; W
    libmat.lib! L) u2 ~& ?' Y& `7 [0 W. l
    libmex.lib! M& U0 C2 d* ~& O% I2 T
    libmx.lib
      
    注:1.lib文件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减
    2.附件依赖性在VS2010前以空格隔开,在VS2010后使用;隔开。
    截图:
    项目右键->属性->链接器->高级->目标计算机:更改(只针对64WINDOWS
    MachineX86 -> MachineX64
    注:分析原因为MATLAB根据计算机平台选择了X64编译环境,如此处不修改会出现 错误3
    3)配置管理器设置(只针对64WINDOWS
    生成->配置管理器->平台:更改
    Win32->X64
    注:分析原因为配合链接器中目标计算机的修改,如此处不修改会出现 错误4
    截图:
    3.系统(Windows)环境设置
    我的电脑->属性->高级系统设置->高级->环境变量->Path,添加:
    <MATLAB>\R2010b\bin;<MATLAB>\R2010b\extern\lib\win64\microsoft;<MATLAB>\bin\win64
    注:1.Windows7的情况下,用户变量系统
    变量都需 添加,如不添加,运行时会出现 错误5
    2.哈哈,别忘记重启哈,重启后生效
    OK!配置就此结束,现在就开始engOpen吧!!对了,别忘记添加#include "engine.h"
      a3 Q0 e  F! o5 j  z* O
      
    2 x/ h/ \8 x# K4 f) H% N/ a1.设置编译器:1 C, t* W9 I2 @
    在确定安装好Matlab Compiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:8 f. |: V7 E+ H9 F6 U$ q4 b
    Mbuild –setup, 按提示选择matlab自带编译器LCC。
    ! s/ _) Y/ r* u4 A6 O
    + _2 O, g, g5 S4 |2.将脚本编译为可执行文件:, K" h, i# c8 W$ o& d" t7 H1 H
    如项目文件包含:gui.m, gui.gif, fun1.m。
    " O. W& i. e2 C  p: C3 [+ m" m) x  w& o4 K# Z$ H8 ~
    在此路径下命令行输入:mcc –m gui.m,生 成:mccExcludedFiles.log,ReadMe.txt,gui.ctf,gui.prj,gui_main.c,gui_mcc_component_data.c,gui.exe。其中:gui.ctf,gui.exe为脱离matlab环境运行必需的文件。7 M7 y) j$ w/ K7 y# d

    - u+ u% S6 B% H8 t$ k3.在未安装matlab的机器上运行可执行程序。
    9 n: g& y3 v* y5 _/ {3 H将R22007b\toolbox\compiler\deploy\win32中的MCRinstaller.exe安装到该计算机上,将生成可执行程序脱离matlab运行所需的函数库。. L2 }- |+ q/ b1 C" B
    将2中生成的gui.ctf,gui.exe拷贝到该计算机同一路径。运行gui.exe将生成gui_mcr文件夹,包含程序运行所需的库。至此完成。' _: Z0 v8 ]' V- @" v& X  f

    ; M7 C% o, g2 T( P4.去除独立可执行程序运行时的“DOS黑窗口”。& `' [1 b& z3 u$ E) K1 B. Q) p9 g
    以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错误信息,可将其去除。
    * _: ]8 }+ C8 j2 N3 F5 G, v/ I  e3 K) c2 l+ [% Q) h
    matlba命令行输入:& z) u& N4 z, t$ C) ]- M

    3 k- s; y& V0 Z; V  x- v7 n9 w, m- ~cd(prefdir)# B9 R( f% g( b2 K8 R
    edit compopts.bat
    ) y& ^  A" v) ]  x% m1 s1 i, i: o& g" S( E4 e; x
    此时compopts.bat打开,在文件最后添加:
    ( L! t  b( ~9 Q: p" k* Y& G, r" F& ~
    set LINKFLAGS=%LINKFLAGS% -subsystem windows  V1 M8 a1 ?1 u2 r
    6 \& N5 H4 I6 V
    如果程序比较复杂,易出现异常,则不建议去除这个dos窗口以便调试。# J1 H1 M% A( C" F+ d9 @3 V

    . S8 P9 p0 p% L. J! L. D& C5 w! F& [* D另外,这个办法是适用于你用的编译器为LCC,如果是其他的,那么所加语句有所不同
    / D8 y+ t# J9 d% g9 P- D7 B; u$ @9 R! b, ?) S: U
    Microsoft Visual C/C++:+ v; Q3 T7 t" ]5 B$ A. n

    : @5 k( A7 H' S+ }. {$ x5 V& C5 Kset LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup6 F8 B8 P0 K- J( ]
    & ?, ~7 Y& b2 h
    Borland:: Y: m: v) T. T" M2 q
    ' q) [8 {9 t# ]; n8 C$ C
    set LINKFLAGS=%LINKFLAGS% -aa
    ; J& [3 |& C! J- ]/ l- H———————————————————————————————————————–& u5 I# F9 U5 @* L  k! ?' \
    9 @% E9 W* o. i  U3 i0 E
    方法一:5 p: }. Q5 [) c5 ^$ p9 K& M
    已有gui.m文件和gui.fig文件# u' t6 \0 k+ J+ G/ G5 `; _9 d* C
    1 在matlab的command窗口中输入
    $ f5 l9 ?- P, f# D3 l) umcc -B sgl GUI.m& \+ l2 A5 s5 T6 O2 Z; U
    2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
    " V3 g9 p; U8 x/ r( X- o" c9 E5 f& X$ o# Q
    此时仍需matlab所必需的动态连接库。) @) N- \' m5 _7 s
    3. 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
    . ~& b  h4 H% v; x4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
    $ h! ?1 R3 \; ?% Z) |- b其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共- }/ C, {. D3 B& i' S
    有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
    ( f5 ~% I: T; @$ D8 T而toolbox目录则必须与应用程序同一目录。
    # l: \. j6 k. M) Z
    # c- L# t" @# D3 a, a方法二:1 `9 Y/ ?5 t6 g& B5 P
    - z7 M* ?0 _+ K8 B
    matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab 也提供了这样的工具。
    6 e$ z: |3 A( I/ A% C6 J# P# L; t1 Q
    1. 转化为c/c++程序并编译为.exe
    # S. P1 H2 N/ H9 g. F4 l先验证mcc是否可用,用matlab中的example验证即可
    ; x/ y; a& O, ?4 [# u7 _4 ]建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)  ~! g# c' B9 O, n# F
    由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
    , V: d9 r) z0 e  W7 F0 U" ~编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等( u8 K( P- P( r0 a2 e
    程序发布需要.exe、bin\、.fig' b6 b1 {+ ~4 M
    ( o: U: ^1 A$ Z( V" d1 M8 `" U
    2. 在未装matlab的电脑上运行程序需要数学运行时库、图像运行时库以及用到的工具箱mex文件
    " [' G) [, c4 z1 L! @, d前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
    % P. i2 J7 N( W另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同2 t0 R4 A$ m; u1 [

    $ V1 E& v. v7 E/ l3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
    2 R) r' ~' h+ J8 A4 T1 c/ s9 v- }  A以下通过注册表自动添加path路径
    1 q. p$ L' B: a8 D4 l7 d! d+ W%————————————————————————————–
    ' f( E& e( I& G2 @$ Y; @+ ZScreen.Next(); — 进入下一个屏幕
    ( n+ ?& c& d% zresultDialog = Dialog.Message(“注意”, “向环境变量中加入matlab数学库及图象库的安装路径?”, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
    ; K# w5 G& z, s. Oif (resultDialog == IDYES) then –加入安装路径
    ) O7 ?( N) u& l' s  h, c; XstrPath = Registry.GetValue(HKEY_CURRENT_USER, “Environment”, “path”, true);
    : ^4 R# ], V+ a' F6 D% ] if strPath ~= “” then
    . |" t; b% |* E. j/ s, A strPath = String.Concat(strPath, “;”);1 r8 c% f* e% o3 x' E
    end; [- W" W, }+ }( y( \
    strPathToAdd = SessionVar.Expand(“%AppFolder%”);
    4 B. I4 m9 a' [; _9 b1 ^, o& K! PstrPathToAdd = String.Concat(strPathToAdd,”file://MATLAB6p5//bin//win32″);2 T8 B* n; I' {  R7 e6 r! a* |3 {
    — 如果路径中无该位置,则加入
    * d0 B' a( E, g" z$ X/ yif String.Find(strPath,strPathToAdd) == -1 then
    2 ?8 S- r1 r% ~* W# b8 v7 ` strPath = String.Concat(strPath, strPathToAdd);! X$ S, S" m+ k( N& f% c
    Registry.SetValue(HKEY_CURRENT_USER, “Environment”, “path”, strPath, REG_SZ);+ s4 ]7 A" ?  P* ^
    end% j: f9 G* p/ s/ {% i4 v
    end
    ! H( l* c# x. q  s/ y9 K. w%————————————————————————————–; E! v" a1 d; `
    方法三:
    7 V. S- @3 y; a2 E) J在网上搜了一个方法,还没有用过, 贴在这里仅供参考:( C8 F" b/ |7 v9 s
    一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---2 }9 \) C1 T  H$ M4 t! ]3 E
    首先,使用mcc编译得到.exe文件,具体参数见帮助文件;0 R! i" g; I$ |) d% a
    其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
    8 p0 Z6 Q) p! n$ j第三,在MATLAB环境,执行命令
    6 d1 V+ o2 h4 }* |mcc -m -B sgl file.m
    . w5 ]+ Z$ E; E- b或者 mcc -p -B sglcpp file.m
    # r, [+ H" y4 x- a4 w. C- L请键入help mcc看帮助。0 ^7 f: Y( J/ |% V
    mcc是在“command windows” 用的吗?
    , g5 L. e) @) Z: U( r6 B只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
      W9 f! L0 s8 y8 s还有“添加环境变量path”是path到.exe文件的环境中是吧?. O% `  I9 _8 _( z4 D' Z$ y
    4 X8 @* G2 _: ?8 `3 f6 I
    二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的 comtest.cbl工程文件打开,再点component–package component就实现了打包,此时到 comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的 _install.bat就可以实现安装- Y, e% ]0 l. @' R. A
    三、 如何将gui生成exe ?
    9 O9 J* F( B$ D: l3 w! i3 z已有gui.m文件和gui.fig文件) W2 c1 B! Y+ A1 S- k; V
    1 在matlab的command窗口中输入* X: K" j# c+ R) Z- |# y6 a2 u
    mcc -B sgl GUI.m" z1 I+ y/ L+ w3 x
    2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器$ N) ^6 R5 {1 c
    此时仍需matlab所必需的动态连接库。
    2 M) t8 c2 L- ~0 r2 J1 W3. 将 /extern/lib/win32 /mglinstallar.exel拷贝到到待运行机器上! B8 n; z& Y$ K9 T5 Z& a& t
    4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在 bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。3 w4 t6 p; m4 j2 q, _2 C3 b$ U* W
    5.大功告成。
    0 N6 X9 o7 t% x# ~
    7 R: }& n- }/ O. L; A6 k外一篇:MATLAB M文件变exe文件  U; S& Y+ P4 S' F: X
    我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序
    2 Y+ U  X6 _, S; @5 W  [希望这些对你有用
    7 [- g0 A: y0 Q/ C& s; V/ U- I6 x/ ]
    如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:
    ! u5 t9 @6 ?' D+ g, v- }6 g
    , l# ]+ |! u- l4 b' ]一、生成独立可执行的程序(exe文件)步骤" v4 _7 R" ^' P' W

    ) f1 {. E) ?% M3 i1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
    ( p9 J- U: {/ j7 Y/ w) S, ~2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。4 W: N) }# X) w1 Q( A/ v
    3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。2 h* W# S6 Z8 I. e; n' u0 u
    当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
    ' r1 _' g$ S. a% A注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
    0 z7 {/ ^2 P4 N4、安装\toolbox\compiler\deploy\win32目录下的MCRInstaller。
    ' y! P7 `' V! [% [$ o8 p9 ]3 k# [8 o& e1 T
    二、脱离matlab运行可执行程序& M% J6 u6 V9 ?! ]( t1 t: H. W
    MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
    0 w$ q& d2 M! n) E* z- E \toolbox\compiler\deploy\win32
    # O7 h6 n6 m' U  U5 u1 S文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。# Z. ?3 w0 W0 h& b" {
    在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
    $ S; R2 ]) H* A; G. T在其它没有安装matlab的机器上运行exe文件前:
    2 l9 {( x: C9 i* f8 i/ }7 a0 K# b首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
    4 M2 w" v1 B5 y& x其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。3 R, m* o' w! x% }1 }3 r/ _
    如果没有,也可手动安装,添加的方法是:; O' S2 V  a; _, N! l: K+ j
    右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。' ~4 J% _$ K3 a* F2 `( Y' K
    注:在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。3 H5 I! v$ E# ^; I. j1 Y: I
    最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
    0 u% B! c5 R# \问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。; q  ~- F8 x' K- l4 i
    美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:, [3 v: G& ?9 x

    0 {9 y. F( V* i3 O消除运行MATLAB生成的exe程序的dos黑屏的办法
    4 h3 w! `$ M+ u基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:( I* y: r8 |4 `, p% S' P
    方法一: 在命令窗口输入:
    * q4 B+ f! O. W! f' pcd(prefdir)
    7 m$ }* O3 x! ]' ^edit compopts.bat
    6 K9 R# J; B( Z% l% a" Z在打开的文件最后添加以下语句:7 w4 [! N( Z/ m$ m" W( J
    ! A& {  v% z: I; Y$ S! U# I0 n: L
    A.VC环境下:
    0 x8 U5 }+ C/ b2 I
    $ w! U) a9 i' K% ?% S# w; Rset LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup ! i+ N! |4 M9 G+ _5 n+ V; D2 {
    , D4 G& {& F- _4 e% c1 c
    B.LCC环境下:
    ) e) a, L; Q) k* p6 D6 z: Dset LINKFLAGS=%LINKFLAGS% -subsystemwindows   ^% T$ T& e, O( q# ^4 G
    5 I- d8 d0 _$ P& A; l3 L
    C. Borland:: |# ], o* T! X- Z5 h
    set LINKFLAGS=%LINKFLAGS% -aa; {2 I  `! [  f( R  e, R" Y

    * @0 d9 V* T, H2 h保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了# @7 d, t9 m5 `

    ; X8 q: V/ y  s方法二:使用suppress工具:
    & o# i1 ?5 ~0 E- X下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将 其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的 suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改 suppress.exe的名字,改为您自己想要的名字。* c4 K' _  {8 w1 B4 g* z7 C6 c

    / o. }/ u# A( G% |, ?9 D1 R" |- g其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。. \) ]5 t4 [5 M$ w
    方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。
    + j" P6 D' O+ s' I6 A/ L. [5 M
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    2

    主题

    6

    听众

    117

    积分

    升级  8.5%

  • TA的每日心情
    开心
    2013-9-18 23:25
  • 签到天数: 53 天

    [LV.5]常住居民I

    群组Matlab讨论组

    群组2013认证赛A题讨论群组

    群组数学建模

    回复

    使用道具 举报

    15

    主题

    10

    听众

    799

    积分

    升级  49.75%

  • TA的每日心情
    开心
    2015-7-17 20:50
  • 签到天数: 68 天

    [LV.6]常住居民II

    自我介绍
    我是一名大二学生。

    群组2013年国赛赛前培训

    回复

    使用道具 举报

    eagle1208 实名认证       

    1

    主题

    4

    听众

    25

    积分

    升级  21.05%

  • TA的每日心情
    开心
    2014-1-10 19:20
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-14 10:03 , Processed in 0.457590 second(s), 72 queries .

    回顶部