VS2010编译QT5失败

最近整理了自己电脑上的源码,重新下载并编译了QT5的最新版本。
一开始还都顺利,后来就报错啦:

        cd qml\ && ( if not exist Makefile D:\Build\QT5\QT5.4.1_VC2010\qtbase\bi
n\qmake D:\Build\QT5\QT5.4.1_VC2010\qtdeclarative\src\qml\qml.pro -o Makefile )
&& "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe" -f Mak
efile

Microsoft (R) Program Maintenance Utility Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe" -
f Makefile.Debug

Microsoft (R) Program Maintenance Utility Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        echo 2 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "D:
\\Build\\QT5\\QT5.4.1_VC2010\\qtbase\\lib\\Qt5Qmld.dll.embed.manifest">D:\Build\
QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll_manifest.rc
        if not exist D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll if exist
 D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll.embed.manifest del D:\Build\
QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll.embed.manifest
        if exist D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll.embed.manife
st copy /Y D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll.embed.manifest D:\
Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll_manifest.bak
        link /NOLOGO /DYNAMICBASE /NXCOMPAT /BASE:0x66000000 /DEBUG /DLL /SUBSYS
TEM:WINDOWS /VERSION:5.41 /MANIFEST /MANIFESTFILE:D:\Build\QT5\QT5.4.1_VC2010\qt
base\lib\Qt5Qmld.dll.embed.manifest /OUT:D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\
Qt5Qmld.dll @C:\Users\Hansen\AppData\Local\Temp\nm86A5.tmp
   Creating library D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.lib and objec
t D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.exp
YarrInterpreter.obj : error LNK2019: unresolved external symbol "struct JSC::Yar
r::CharacterClass * __cdecl JSC::Yarr::newlineCreate(void)" (?newlineCreate@Yarr
@JSC@@YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Yar
r::CharacterClass * __thiscall JSC::Yarr::YarrPattern::newlineCharacterClass(voi
d)" (?newlineCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ)
YarrJIT.obj : error LNK2001: unresolved external symbol "struct JSC::Yarr::Chara
cterClass * __cdecl JSC::Yarr::newlineCreate(void)" (?newlineCreate@Yarr@JSC@@YA
PAUCharacterClass@12@XZ)
YarrPattern.obj : error LNK2001: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::newlineCreate(void)" (?newlineCreate@Yarr@JSC
@@YAPAUCharacterClass@12@XZ)
YarrInterpreter.obj : error LNK2019: unresolved external symbol "struct JSC::Yar
r::CharacterClass * __cdecl JSC::Yarr::wordcharCreate(void)" (?wordcharCreate@Ya
rr@JSC@@YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Y
arr::CharacterClass * __thiscall JSC::Yarr::YarrPattern::wordcharCharacterClass(
void)" (?wordcharCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ
)
YarrJIT.obj : error LNK2001: unresolved external symbol "struct JSC::Yarr::Chara
cterClass * __cdecl JSC::Yarr::wordcharCreate(void)" (?wordcharCreate@Yarr@JSC@@
YAPAUCharacterClass@12@XZ)
YarrPattern.obj : error LNK2001: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::wordcharCreate(void)" (?wordcharCreate@Yarr@J
SC@@YAPAUCharacterClass@12@XZ)
YarrPattern.obj : error LNK2019: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::digitsCreate(void)" (?digitsCreate@Yarr@JSC@@
YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Yarr::Cha
racterClass * __thiscall JSC::Yarr::YarrPattern::digitsCharacterClass(void)" (?d
igitsCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ)
YarrPattern.obj : error LNK2019: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::spacesCreate(void)" (?spacesCreate@Yarr@JSC@@
YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Yarr::Cha
racterClass * __thiscall JSC::Yarr::YarrPattern::spacesCharacterClass(void)" (?s
pacesCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ)
YarrPattern.obj : error LNK2019: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::nondigitsCreate(void)" (?nondigitsCreate@Yarr
@JSC@@YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Yar
r::CharacterClass * __thiscall JSC::Yarr::YarrPattern::nondigitsCharacterClass(v
oid)" (?nondigitsCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ
)
YarrPattern.obj : error LNK2019: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::nonspacesCreate(void)" (?nonspacesCreate@Yarr
@JSC@@YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC::Yar
r::CharacterClass * __thiscall JSC::Yarr::YarrPattern::nonspacesCharacterClass(v
oid)" (?nonspacesCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterClass@23@XZ
)
YarrPattern.obj : error LNK2019: unresolved external symbol "struct JSC::Yarr::C
haracterClass * __cdecl JSC::Yarr::nonwordcharCreate(void)" (?nonwordcharCreate@
Yarr@JSC@@YAPAUCharacterClass@12@XZ) referenced in function "public: struct JSC:
:Yarr::CharacterClass * __thiscall JSC::Yarr::YarrPattern::nonwordcharCharacterC
lass(void)" (?nonwordcharCharacterClass@YarrPattern@Yarr@JSC@@QAEPAUCharacterCla
ss@23@XZ)
D:\Build\QT5\QT5.4.1_VC2010\qtbase\lib\Qt5Qmld.dll : fatal error LNK1120: 7 unre
solved externals
NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\link.EXE"' : return code '0x460'
Stop.
NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

后来发现,是一开始的时候python没有正确的添加到路径之中,导致一个文件生成失败,从而引起的这个错误。
其解决方法如下:

1、查看文件%QT_HOME%\qtdeclarative\src\qmlRegExpJitTables.h,大小应该为0,删除该文件
2、确保可以执行python命令
3、重新nmake

此外,我的QT5编译环境配置文件如下:

@@set mkspecs=win32-msvc2010

@call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"

@set PYTHON_HOME=C:\Languages\Python\Python27
@set PERL_HOME=C:\Languages\Perl5
@set RUBY_HOME=C:\Languages\Ruby\Ruby200x86
@set GNU_HOME=D:\Build\QT5\QT5.4.1_VC2010\gnuwin32
@set PATH=%PATH%;%PYTHON_HOME%;%PERL_HOME%\bin;%RUBY_HOME%\bin;%GNU_HOME%\bin

@set DXSDK_DIR=C:\ProgramerTools\DirectX\Microsoft DirectX 9.0 SDK (Summer 2004)

@color 02
@title QT5+VS2010

@cmd

Winform多行标题TabControl

今天写示例程序的时候,遇到了需要多行标题TabControl的情况。
整体流程很简单,就是将标题拆分,然后根据行数和最大行宽设置每一Page标题的高度及宽度即可。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace UITabControlTest
{
    public partial class SubForm : Form
    {
        private Dictionary<TabPage, TabPageInfo> allTabMap = new Dictionary<TabPage, TabPageInfo>();

        public SubForm()
        {
            InitializeComponent();
            tabMain.DrawMode = TabDrawMode.OwnerDrawFixed;
        }

        private void SubForm_Load(object sender, EventArgs e)
        {
            tabPage1.Text = "line1\nline2\nline3\nline4\nlin5";
            tabPage2.Text = "line1\nline2\nline3\nline4";
            tabPage3.Text = "line1\nline2\nline3";
            tabPage4.Text = "line1\nline2";

            int lineNum = 0;
            foreach (TabPage tab in this.tabMain.TabPages)
            {
                TabPageInfo pInfo = new TabPageInfo(tab.Text,"\n");
                allTabMap.Add(tab, pInfo);
                lineNum = lineNum>pInfo.LineNum?lineNum:pInfo.LineNum;
            }

            foreach (TabPage tab in this.tabMain.TabPages)
            {
                TabPageInfo pInfo = allTabMap[tab];
                tab.Text = pInfo.MaxLine;
            }

            //some thing is wrong, the font height is 14, the padding height is around 9, why?
            tabMain.Padding = new Point(0, Convert.ToInt32(tabMain.Font.Height * (lineNum - 1) * 0.65));
        }

        private void tabMain_DrawItem(object sender, DrawItemEventArgs e)
        {
            TabControl tabControl = (TabControl)sender;
            TabPage currentTab = tabControl.TabPages[e.Index];
            TabPageInfo info = allTabMap[currentTab];
            string tabText = info.AllLine;
            
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Center;
            RectangleF tabRect = (RectangleF)e.Bounds;
            RectangleF textRect = tabRect;
            if (e.Index == tabControl.SelectedIndex)
            {
                tabRect.Inflate(1, 1);
            }

            Graphics g = e.Graphics;
            g.Clip = new Region(tabRect);
            g.Clear(Control.DefaultBackColor);
            g.ResetClip();
            g.DrawString(tabText, e.Font, SystemBrushes.ControlText, textRect, sf);
        }
    }

    class TabPageInfo
    {
        public int LineNum
        {
            get
            {
                return nLineNum;
            }
        }

        public String MaxLine
        {
            get
            {
                //prevent auto wrap
                return szMaxLine+"  ";
            }
        }

        public String getLine(int index)
        {
            if (index < nLineNum)
            { 
                return szLines[index];
            }
            else
            {
                return "";
            }
        }

        public String AllLine
        {
            get
            {
                return szAllLine;
            }
        }

        private int nLineNum = 0;
        private String[] szLines;
        private String szAllLine;
        private String szMaxLine;

        public TabPageInfo(String pageTitle, String splitString)
        {
            szAllLine = pageTitle.Replace(splitString, "\n");
            String [] separators = new String[]{splitString};
            szLines = pageTitle.Split(separators,StringSplitOptions.RemoveEmptyEntries);
            nLineNum = szLines.Length;

            int nMaxLineWidth = 0;
            foreach(String line in szLines)
            {
                if (nMaxLineWidth < line.Length)
                {
                    nMaxLineWidth = line.Length;
                    szMaxLine = line;
                }
            }
        }
    }
}

感悟20150331

上周年假到期了,于是休了三天年假,加上周末,舒舒服服的休了五天(当然,被骚扰是避免不了的)。

假期看了两本书,都是放假前刚买的。

第一本是《淘宝技术这十年》,说实话书的含金量不高,收获也有限,但看完后信心增强了很多。
1、最快的办法是买一个,这个深有感触,而且也用过;
2、淘宝的架构经历了使用开源-》初级企业级应用-》高级企业级应用-》自定义开源-》贡献开源的过程,而我们公司现在正在经历第三步(数据量比淘宝小多了,但是上亿的数据量还是很常见的);
3、作者是多面手,和我很像,但我在工作中用的语言比他要多几种(c,c++,c#);
4、自己身处的环境很重要,身边有牛人,对自己成长会有很大好处;身边有志同道合的人,才可能成事;
5、大家都苦逼过;
6、牛人也是逼出来的;
7、用钱买最优秀的人,为的是时间;

第二本是《带人的技术》,说实话,这本书唯一打动我的地方就是副标题:不懂带人你就自己做到死。
全书对我最有启示的地方是:在日常生活中,很多新人都让他去自生自灭了,根本就没有一个带教的过程,自己也不是一个合格的Team Leader,没有给组员提供应有的帮助。
还有一个小启示:员工离职的原因之一是“主管评语”。
以后要多和组员聊聊家常,帮他们规划一下发展道路,让公司像家一样。

还有两件事情:

第一件是,我们公司对于年假的处理。
去年下半年,公司发出邮件,正式声明:年假到期作废。同时,员工手册有相矛盾的说明:过期后可以申请换钱。
鉴于前年对于年终奖从入职还是转正开始,公司和员工手册也有相互矛盾的声明,最后用了公司的声明看来,员工手册不可靠,公司想怎么解释就怎么解释。
我觉得让组员把年假全部休完。
这件事情,公司处理是欠妥的。应该的处理方法为:员工调休先用年假,年假要强制休完,如果有特殊情况,公司应该直接将年假换钱给员工。
原因很简单:
A、公司制度自相矛盾,而且没有说明,公司就不会有信用
B、公司不保护员工利益,员工就不会保护公司利益
C、员工没有休完年假,是为了工作在忙,不是为了那点儿钱,还要员工去申请,只能让员工感觉公司很冷漠,自己付出没有意义
D、其他出差申请单,加班申请单,都是很傻的叫法。员工出差和加班,是为了公司付出了自己的时间来完成工作。不是员工要申请“求求你让我加班吧”,“求求你让我出差吧”,“求求你让我把年假换钱吧”,而仅仅是作为项目成本的一个凭证,应该修改为出差单和加班单。

第二件是,潘爷请我们去了海底捞。
海底捞的员工都很热情,服务很积极,给人很阳光的一种感觉。
我们的团队,就是缺少这种凝聚力。
管理是一门艺术啊。

调动大家的积极性,留住要留的人,赶走混日子的人,一家公司才能繁荣昌盛。
现在我们的公司,管理层有些人员不接地气,要留的人留不住,难啊。
问了问,其他同行也差不多,好诡异啊,好的人才都去哪里了呢?

IIS开启程序集绑定日志

最近,将一个AnyCPU+Win32的程序,调整到了x64架构,但一直各种绑定失败。
IIS7一直提示要开启程序就绑定日志:

警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

好吧,命令行搞定

reg add HKLM\software\microsoft\fusion /v Enablelog /t REG_DWORD /d 1

然后,IIS7仍然坚持不懈的提示绑定失败。提示dll格式不正确。
弄了一个多小时,发现应用程序池的“Enable 32-Bit Applications”选项打开了,晕死。
关闭之,搞定!!!

PS:
按网上的说法,Fuslogvw.exe可以查看绑定失败的日志。但我打开后没有哦,以后再试试看。

JIRA与Confluence集成安装手册

1、先安装mysql

2、新建DB用户

3、用下面的语句建库

CREATE DATABASE jira CHARACTER SET utf8 COLLATE utf8_bin;
CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin;

4、安装atlassian-jira-6.4.8-x64
A、安装程序
B、把jdbc驱动拷贝到lib下
C、设置DB
D、设置管理员用户
E、登录后,上传语言包

5、安装atlassian-confluence-5.8.6-x64
A、安装程序
B、把jdbc驱动拷贝到lib下
C、设置DB
D、设置账户连接到JIRA
E、登录后,上传语言包

6、搞定!

此外,如果要重新配置JIRA:
1、导出数据
2、关闭服务
3、重命名文件Application Data\JIRA\dbconfig.xml
4、开启服务登录即可

如果要重新配置Confluence :
1、导出数据
2、关闭服务
3、重命名文件Application Data\Confluence\confluence.cfg.xml
4、开启服务登录即可

如果只是要调整JIRA数据库连接参数,可以
A、编辑Application Data\JIRA\dbconfig.xml

B、运行JIRA\bin\config.bat

如果只是要调整Confluence数据库连接参数,可以
A、编辑Application Data\Confluence\confluence.cfg.xml

CMD常用命令16获取命令行参数

wmic process where caption="java.exe" get caption,commandline /value

"D:\NeoLang\Java\JDK\jdk_x64_1.8.0_77\bin\java.exe"
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-classpath "D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\bin\bootstrap.jar;D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\bin\tomcat-juli.jar"
-Dcatalina.base="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64"
-Dcatalina.home="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64"
-Djava.io.tmpdir="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\temp"
org.apache.catalina.startup.Bootstrap  start

"C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe"
-Djetty.home=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429
-Djetty.base=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429
-Djava.io.tmpdir=C:/Users/Hansen/AppData/Local/Temp
-jar D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429/start.jar jetty.state=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429/jetty.state jetty-started.xml

R语言做简单线性规划

首先要安装线性规划扩展包

install.packages("lpSolve")

例1:
某工厂甲、乙两种产品,每件甲产品要耗钢材2kg、煤2kg、产值为120元;每件乙产品要耗钢材3kg,煤1kg,产值为100元。现钢厂有钢材600kg,煤400kg,试确定甲、乙两种产品各生产多少件,才能使该厂的总产值最大?

解:

# 优化方向: 
# maximize
# 目标函数:
# f(X1,X2)=120X1+100X2
# 约束条件:
# 2X1+3X2<=600
# X1+X2<=400

#引用lpSolve
library (lpSolve)

#求解
f.obj <- c (120, 100)
f.con <- matrix ( c (2, 3, 1, 1), nrow = 2, byrow = TRUE )
f.dir <- c ( "<=" , "<=" )
f.rhs <- c (600, 400)
lp.result <- lp ( "max" , f.obj, f.con, f.dir, f.rhs)

#输出结果
lp.result
#Success: the objective function is 36000 

#输出解
lp.result$solution
#[1] 300   0

例2:
某工厂要做100套钢架,每套用长为2.9m,2.1m,1.5m的圆钢各一根。已知原料每根长7.4m,问:应如何下料,可使所用原料最省?(可选方案如下)

可选方案 方案1 方案2 方案3 方案4 方案5
2.9m 1 2 0 1 0
2.1m 0 0 2 2 1
1.5m 3 1 2 0 3
合计 7.4 7.3 7.2 7.1 6.6
剩余料头 0 0.1 0.2 0.3 0.8

解:

# 优化方向: 
# minimize
# 目标函数:
# f(X1,X2,X3,X4,X5)=0X1+0.1X2+0.2X3+0.3X4+0.8X5
# 约束条件:
# X1+2X2 + 0X3 + X4 + 0X5>=100
# 0X1+0X2 + 2X3 + 2X4 + 1X5>=100
# 3X1+X2 + 2X3 + 0X4 + 3X5>=100

#引用lpSolve
library (lpSolve)

#求解
f.obj <- c (0, 0.1, 0.2, 0.3, 0.8)
f.con <- matrix ( c (1, 2, 0, 1, 0, 0, 0, 2, 2, 1, 3, 1, 2, 0, 3), nrow = 3, byrow = TRUE )
f.dir <- c ( ">=", ">=", ">=" )
f.rhs <- c (100, 100, 100)
lp.result <- lp ( "min" , f.obj, f.con, f.dir, f.rhs)

#输出结果
lp.result
#Success: the objective function is 10

#输出解
lp.result$solution
#[1] 100   0  50   0   0

CMD常用命令15获取管理员权限模板

@echo off

:AQUIRE_ADMINISTRATOR_PRIVILEGE
rem 获取管理员权限
rem 首先在%windir%尝试新建文件夹,查看是否有管理员权限
rem 如果新建文件夹成功则删除文件夹,继续操作
rem 如果失败文件夹则新建vbs脚本,通过UAC窗口,获取管理员权限
rem 运行脚本后,删除vbs脚本
md "%windir%\TestAdminPrivilege" &gt; nul
cls
if '%errorlevel%' == '0' (
rmdir "%windir%\TestAdminPrivilege" &amp; goto gotAdmin
) else (goto UACPrompt)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) &gt; "%temp%\getadmin.vbs"
echo UAC.ShellExecute %0, "", "", "runas", 1  &gt;&gt; "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs")
CD /D "%~dp0"

:Init
REM 设置窗口标题,窗口颜色,并输出提示信息,通过输入来判断跳转到哪里
cls
title CMD窗口标题
color A
set CHOICE=
echo ----------------------------提示信息标题-------------------------------------
echo.
echo                             提示信息内容
echo                             提示信息内容
echo.
echo ----------------------------------------------------------------------------
echo           您需要以管理员身份运行,或关闭“用户帐户控制(UAC)”
echo ----------------------------------------------------------------------------
:RE_INPUT
echo.
echo  键入 i 安装,键入 r 卸载,键入 q 退出 (键入后请按回车键确认)
set /P CHOICE= ^&gt; 选择:
if /I "%CHOICE%" == "i" goto INSTALL_DETECT
if /I "%CHOICE%" == "r" goto REMOVE
if /I "%CHOICE%" == "q" goto END
goto INPUT_UNKNOWN

:REMOVE
echo  删除提示信息
rem del /F /Q FULL_FILE_PATH
REM reg IMPORT UNINSTALL_DRIVER.REG
goto REMOVE_END

:REMOVE_END
echo  卸载完毕提示信息
goto END

:INSTALL_DETECT
REM 判断32位还是64位系统
if /I "%PROCESSOR_ARCHITECTURE%" == "AMD64" goto INSTALL64
if /I "%PROCESSOR_ARCHITECTURE%" == "x86" goto INSTALL32
goto INSTALL_UNKNOWN

:INSTALL64
echo  将为您安装64位程序
echo  安装提示信息
REM copy /Y FROM_PATH_64 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL32
echo  将为您安装32位程序
echo  安装提示信息
REM copy /Y FROM_PATH_32 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL_END
echo  安装成功提示信息
goto END

:INPUT_UNKNOWN
echo  键入的信息错误,请重试
goto RE_INPUT

:INSTALL_UNKNOWN
echo  未能识别您的系统信息,无法为您安装驱动,您可能需要手动安装
goto END

:END
REM 清理环境变量
echo.
set CHOICE=
pause
# 使用myuid来执行mycmd
# 需要输入密码
runas /noprofile /user:myuid mycmd
# 执行命令时不按enter
# 而是按ctrl+shift+enter
ctrl+shift+enter

AndroidStudio打包so文件

AndroidStudio打包so文件方法如下:
1、将so文件,用下面的文件结构打包为一个zip包,并修改后缀为jar,如armeabi.jar
/lib/armeabi/*.so

2、将armeabi.jar拷贝到项目的libs文件夹下
/your_project/app/libs

3、AndroidStudio会默认将libs下的*.jar一起打包

这样就好啦