项目中需要使用runkit模块实现AOP,但是团队成员的开发环境都是Windows,而runkit模块官方没有提供Windows环境下的dll扩展,只能自己编译。

下面是编译过程的分类总结。(操作系统环境为Windows 10 64位中文旗舰版)

  • PHP的编译版本
    这里的版本指的不是PHP的发行版本,如5.3、7.0,而是指编译时所使用的编译器、程序架构和是否为线程安全。
    这些信息可以在phpinfo中打印出来。

    上图中所使用的PHP,是使用Miscrosoft Visual 2012中的MSVC11编译的,程序架构为x86(即32位),非线程安全(NTS)。

    上图中的PHP,是使用Miscrosoft Visual 2012中的MSVC11编译的,程序架构为x64(即64位),线程安全(TS)。

    上图略有不同,没有专门的列表项说明编译器版本、程序架构,只能从编译时的配置中看到相关信息。这里的PHP,是使用Miscrosoft Visual 6中的MSVC6编译的,程序架构为x86(即32位),线程安全(Thread Safety = enabled)。

    最后这一张,是使用Miscrosoft Visual 2008中的MSVC9编译的,程序架构为x86(即32位),线程安全(TS)。
    本文只讨论MSVC9和MSVC11编译两种情况。
  • 准备PHP-SDK和PHP源码
    以下步骤无论编译哪种版本的PHP,都是必须的。
    • 下载PHP-SDK:
      下载地址在http://windows.php.net/downloads/php-sdk/中可以找到,下载其中的php-sdk-binary-tools-20110915.zip
    • 解压到C:\php-sdk文件夹
    • 打开命令行,执行如下命令:

      cd c:\php-sdk\
      bin\phpsdk_buildtree.bat phpdev
      会在c:\php-sdk文件夹下生成phpdev文件夹,其中包含vc6、vc8、vc9子文件夹。
      如果使用MSVC11编译PHP,就复制c:\php-sdk\phpdev\vc9到c:\php-sdk\phpdev\vc11。
      如果使用MSVC14编译PHP,就复制c:\php-sdk\phpdev\vc9到c:\php-sdk\phpdev\vc14。

    • 下载相应版本的PHP的编译时依赖包,下载地址见http://windows.php.net/downloads/php-sdk/
      将其解压至相应编译文件夹下的x86或x64文件夹下,覆盖其中的deps文件夹。注意要与要编译的PHP发行版本和程序架构一致,如编译php5.4.x的32位版本则解压deps-5.4-vc9-x86.7z,如编译php5.5.x的64位版本则解压deps-5.6-vc11-x64.7z,依此类推。
      php5.4.x和php5.3.x通常需要使用vc9编译,因此其依赖文件解压到c:\php-sdk\phpdev\vc9\x86或c:\php-sdk\phpdev\vc9\x64。
      php5.5.x和php5.6.x通常需要使用vc11编译,因此其依赖文件解压到c:\php-sdk\phpdev\vc11\x86或c:\php-sdk\phpdev\vc11\x64。
      而php7.0.x则需要vc14编译,因此其依赖文件解压到c:\php-sdk\phpdev\vc14\x86或c:\php-sdk\phpdev\vc14\x64。
    • 下载所需要的PHP源文件,下载地址在http://windows.php.net/download/http://php.net/downloads.phphttp://php.net/releases/http://windows.php.net/downloads/releases/archives/几处都可以找到。
      将其解压制相应的编译文件夹下。
      例如:
      php-5.4.45.tar.gz解压到c:\php-sdk\phpdev\vc9\x86\php-5.4.45或c:\php-sdk\phpdev\vc9\x64\php-5.4.45下,以分别编译其32位和64位版本。
      php-5.6.16.tar.gz则解压到c:\php-sdk\phpdev\vc11\x86\php-5.6.16或c:\php-sdk\phpdev\vc11\x64\php-5.6.16下。
      php-7.0.3.tar.gz解压到c:\php-sdk\phpdev\vc11\x86\php-5.6.16或c:\php-sdk\phpdev\vc11\x64\php-7.0.3下。
    • 如果是编译PHP扩展,则到相应的地址下载源码,本文是以runkit为例,下载地址在http://pecl.php.net/package/runkit
      将下载到的源码解压到PHP源码的ext文件夹下,本例是分别解压到c:\php-sdk\phpdev\vc9\x86\php-5.4.45\ext\runkit、c:\php-sdk\phpdev\vc9\x64\php-5.4.45\ext\runkit、c:\php-sdk\phpdev\vc11\x86\php-5.6.16\ext\runkit、c:\php-sdk\phpdev\vc11\x64\php-5.6.16\ext\runkit、c:\php-sdk\phpdev\vc9\x86\php-7.0.3\ext\runkit、c:\php-sdk\phpdev\vc9\x64\php-7.0.3\ext\runkit。
  • 准备编译环境:

下面是具体的编译步骤,有些内容会出现重复,是为了让偷懒的同学按图索骥,有样学样:)

  • 使用MSVC9编译PHP5.4.33的32位版(本例为编译runkit.dll)

    • 安装Windows SDK 6.1,注意安装时选择x86编译器。
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-5.4.45.tar.gz解压到c:\php-sdk\phpdev\vc9\x86\php-5.4.45。
    • 将下载的deps-5.4-vc9-x86.7z解压到c:\php-sdk\phpdev\vc9\x86\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc9\x86\php-5.4.45\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc9\x86下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Microsoft Windows SDK V6.1>CMD Shell,启动编译命令行。
    • 输入如下指令:
      setenv /x86 /xp /release(此行命令执行成功,命令行的文字将变为绿色)
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc9\x86\php-5.4.45
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。
  • 使用MSVC9编译PHP5.4.33的64位版(本例为编译runkit.dll)
    • 安装Windows SDK 6.1,注意安装时选择x86编译器。
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-5.4.45.tar.gz解压到c:\php-sdk\phpdev\vc9\x64\php-5.4.45。
    • 将下载的deps-5.4-vc9-x86.7z解压到c:\php-sdk\phpdev\vc9\x64\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc9\x64\php-5.4.45\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc9\x64下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Microsoft Windows SDK V6.1>CMD Shell,启动编译命令行。
    • 输入如下指令:与上面编译32位程序明显不同的是,不需要执行 setenv /x86 /xp /release
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc9\x64\php-5.4.45
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。
  • 使用MSVC11编译PHP5.6.16的32位版(本例为编译runkit.dll)
    • 安装Visual Studio 2012 Express for Windows Desktop
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-5.6.16.tar.gz解压到c:\php-sdk\phpdev\vc11\x86\php-5.6.16。
    • 将下载的deps-5.6-vc11-x86.7z解压到c:\php-sdk\phpdev\vc11\x86\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc11\x86\php-5.6.16\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc11\x86下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Microsoft Visual Studio 2012>Visual Studio Tools>VS2012 x86 Native Tools Command Prompt,启动编译命令行。
    • 输入如下指令:
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc11\x86\php-5.6.16
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。
  • 使用MSVC11编译PHP5.6.16的64位版(本例为编译runkit.dll)
    • 安装Visual Studio 2012 Express for Windows Desktop
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-5.6.16.tar.gz解压到c:\php-sdk\phpdev\vc11\x64\php-5.6.16。
    • 将下载的deps-5.6-vc11-x64.7z解压到c:\php-sdk\phpdev\vc11\x64\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc11\x64\php-5.6.16\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc11\x64下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Microsoft Visual Studio 2012>Visual Studio Tools>VS2012 x64 Cross Tools Command Prompt,启动编译命令行。
    • 输入如下指令:
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc11\x64\php-5.6.16
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。
  • 使用MSVC14编译PHP7.0.3的32位版(本例为编译runkit.dll)

    • 安装Visual Studio 2015 Community
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-7.0.3.tar.gz解压到c:\php-sdk\phpdev\vc14\x86\php-7.0.3。
    • 将下载的deps-7.0-vc14-x86.7z解压到c:\php-sdk\phpdev\vc14\x86\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc14\x86\php-7.0.3\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc14\x86下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Visual Studio 2015>VS2015 x64 X86 兼容工具命令行,启动编译命令行。
    • 输入如下指令:
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc14\x86\php-7.0.3
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。
  • 使用MSVC14编译PHP7.0.3的64位版(本例为编译runkit.dll)
    • 安装Visual Studio 2015 Community
    • 将下载的php-sdk-binary-tools-20110915.zip解压到c:\php-sdk。
    • 打开Windows命令行,输入如下命令:
      cd c:\php-sdk
      bin\phpsdk_buildtree.bat phpdev
    • 将下载的php-7.0.3.tar.gz解压到c:\php-sdk\phpdev\vc14\x64\php-7.0.3。
    • 将下载的deps-7.0-vc14-x64.7z解压到c:\php-sdk\phpdev\vc14\x64\deps覆盖原deps文件夹。
    • 将下载的http://pecl.php.net/get/runkit-1.0.4.tgz解压到c:\php-sdk\phpdev\vc14\x64\php-7.0.3\ext文件夹,注意文件夹的名称不要带版本号,本例应为runkit,而非runkit-1.0.4。
    • 在c:\php-sdk\phpdev\vc14\x64下建立obj文件夹,用于存放最终的php.exe及相关的dll文件。
    • 点击开始菜单,选择Visual Studio 2015>VS2015 x86 X64 兼容工具命令行,启动编译命令行。
    • 输入如下指令:
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      cd phpdev\vc14\x64\php-7.0.3
      buildconf
      configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..\obj
      如需编译非线程安全版 (nts版),将上面最后一行换成
      configure --disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..\obj
      最终执行
      nmake
    • 在obj中有Release(线程安全版-ts版)或Release_nts(非线程安全版-nts版)文件夹,其中的php.exe及php-runkit.dll即为编译结果。
    • 将php-runkit.dll文件放入PHP安装文件夹的ext文件夹中,修改php.ini,加入extension=php_runkit.dll,重新启动PHP服务即可。

可能遇到的问题:

  • 如果遇到There is no script engine for file extension ".js"错误,说明Windows的jscript引擎没有正确注册,可按如下步骤解决:

    • 以管理员身份打开命令行:
    • 执行如下指令:

      regsvr32 %WINDIR%\System32\jscript.dll
      regsvr32 %WINDIR%\SysWOW64\jscript.dll

    • 生成一个jscript.reg的文件,内容如下:

      Windows Registry Editor Version 5.00

      [HKEY_CLASSES_ROOT\.js]
      @="jsfile"

      [HKEY_CLASSES_ROOT\.js\PersistentHandler]
      @="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

      [HKEY_CLASSES_ROOT\JSFile]
      "FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
        00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
        32,00,5c,00,77,00,73,00,68,00,65,00,78,00,74,00,2e,00,64,00,6c,00,6c,00,2c,\
        00,2d,00,34,00,38,00,30,00,34,00,00,00

      [HKEY_CLASSES_ROOT\JSFile\ScriptEngine]
      @="JScript"

      [HKEY_CLASSES_ROOT\JSFile\ScriptHostEncode]
      @="{85131630-480C-11D2-B1F9-00C04F86C324}"

      [HKEY_CLASSES_ROOT\JSFile\Shell]
      @="Open"

      [HKEY_CLASSES_ROOT\JSFile\Shell\Open\Command]
      @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
        00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,53,00,\
        63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,\
        00,22,00,20,00,25,00,2a,00,00,00

      [HKEY_CLASSES_ROOT\JSFile\Shell\Open2]
      @=hex(2):4f,00,70,00,65,00,6e,00,20,00,26,00,77,00,69,00,74,00,68,00,20,00,43,\
        00,6f,00,6d,00,6d,00,61,00,6e,00,64,00,20,00,50,00,72,00,6f,00,6d,00,70,00,\
        74,00,00,00
      "MUIVerb"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
        6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
        00,77,00,73,00,68,00,65,00,78,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,\
        34,00,35,00,31,00,31,00,00,00

      [HKEY_CLASSES_ROOT\JSFile\Shell\Open2\Command]
      @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
        00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,43,00,53,00,\
        63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,\
        00,22,00,20,00,25,00,2a,00,00,00

      [HKEY_CLASSES_ROOT\JSFile\Shell\Print\Command]
      @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
        00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,6f,00,\
        74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,70,00,20,\
        00,25,00,31,00,00,00

      [HKEY_CLASSES_ROOT\JSFile\ShellEx\DropHandler]
      @="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

      [HKEY_CLASSES_ROOT\JSFile\ShellEx\PropertySheetHandlers\WSHProps]
      @="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

      [HKEY_CLASSES_ROOT\JScript]
      @="JScript Language"

      [HKEY_CLASSES_ROOT\JScript\CLSID]
      @="{f414c260-6ac0-11cf-b6d1-00aa00bbbb58}"

      [HKEY_CLASSES_ROOT\JScript\OLEScript]

    • 双击该文件,点击确定,将其导入注册表即可。
  • 如果在使用MSVC9编译32位PHP时,遇到Checking for cl.exe ... <not found>错误,就表示在安装Windows SDK 6.1时,忘记选择x86编译器。

PS:

  • 以上的步骤中,其实有很多是不需要按部就班的,尤其是文件夹结构。c:\php-sdk,其实可以放在任意盘符下。只要在开始编译前,执行一上:x:\php-sdk\bin\php-setvars.bat就可以了(x:为php-sdk所在盘符)。
  • phpdev及其下的各级文件夹也是不需要的,尤其是x86和x64文件夹,并不是放错了就不行的,那只是方便辨识最后编译的结果。只要将deps和php源码放在同一个文件夹下,比如在d:建立php-source文件夹,其下放置desp、obj和php-5.6.16子文件夹(嗯,obj放哪儿也无所谓,在编译时直接将输出结果的位置指向到obj就行了),进入php-5.6.16文件夹进行编译即可。

实践过程中,主要参考如下三篇文章,仅向原作者致谢:

【原创】在Windows系统中使用VC9、VC11编译32位、64位PHP及其扩展的更多相关文章

  1. UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究

    内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...

  2. 关于Linux系统和Windows系统中文件夹的命名规范

    Windows系统中. 1.在创建文件夹的时候不能以"."开头(但是文件以多个点开头并且还有其他合法字符的话就是合法的) 但是在windows系统中确实见过以一个点".& ...

  3. mysql绿色版在windows系统中的启动

    mysql绿色版在windows系统中的启动 1.下载mysql免安装版 例如:mysql-5.7.11-winx64 2.修改配置文件,my-default.ini名称改为:my.ini,文件里面的 ...

  4. 在Windows系统中安装集成的PHP开发环境

    原文:在Windows系统中安装集成的PHP开发环境 刚想学php的,又不会配置复杂php的环境,可以使用集成的,目前网上提供常用的PHP集成环境主要有AppServ.phpStudy.WAMP和XA ...

  5. 获取Windows系统中的所有可用和在用串口

    目的:获取Windows系统中的所有可用和在用串口 方法:注册表查询法 优点:简单.实用.快速.无遗漏,无多余结果. 说明:另外还有8种方法可以枚举串口,但都不如此法. 代码和详细注释如下: //-- ...

  6. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  7. 【其他】【服务器】【4】删除Windows系统中不想要的服务

    步骤: 1,开始菜单栏查找“服务”,打开后找到想要删除的服务 2,右键单击想要删除的服务,选择“属性”-“常规”-“服务名称”,记下服务名称(AA) 3,开始菜单栏输入“cmd”打开命令行窗口,输入s ...

  8. Cmder命令行工具在Windows系统中的配置

    一.Cmder简介 Cmder:一款用于Windows系统中,可增强传统cmd命令行工具的控制台模拟器(类似于Linux系统中的终端控制窗口) 特点: 无需安装,解压即用 可使用较多Linux命令,如 ...

  9. python - 在Windows系统中安装Pygame及导入Eclipse

    环境:python3.6(只有一个版本)+ windows10(64 bit)  + Eclipse+pydev python3.6安装完成后,会自带 easy_install 和 pip3,在Win ...

随机推荐

  1. 6.2笔记-DQL语句查询数据库

    一.DQL语句 1.常量列 SELECT `StudentName` AS 姓名, `Address` AS 地址, '北京信息中心' AS 学校名称 FROM `student`; 2.常用函数 聚 ...

  2. C++11奇怪的语法

    1. istream_iterator 简而言之,istream_iterator像操作容器一样操作istream.例如下面代码,从std::cin构造std::istream_iteream< ...

  3. 修改jvm xms参数

    http://hi.baidu.com/200770842223/item/9358aad4f3194e1a20e2501b http://www.cnblogs.com/mingforyou/arc ...

  4. volyaire重振Infiniband

    InfiniBand简 称IB,DoSTOR存储小字典里的解释是,一种新的I/O总线技术,用于取代目前的PCI总线.IB主要应用在企业网络和数据中心,也可以应用在高速线 速路由器.交换机.大型电信设备 ...

  5. tensorflow 基本函数(1.tf.split, 2.tf.concat,3.tf.squeeze, 4.tf.less_equal, 5.tf.where, 6.tf.gather, 7.tf.cast, 8.tf.expand_dims, 9.tf.argmax, 10.tf.reshape, 11.tf.stack, 12tf.less, 13.tf.boolean_mask

    1.  tf.split(3, group, input)  # 拆分函数    3 表示的是在第三个维度上, group表示拆分的次数, input 表示输入的值 import tensorflow ...

  6. ubuntu安装rtx

    终端安装RTX sudo apt-get install wine 安装wine下的window扩展包安装工具winetricks,在终端下输入: sudo wget http://winetrick ...

  7. __stdcall详解

    对_stdcall 的理解(上) 在C语言中,假设我们有这样的一个函数:int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用 ...

  8. cluster DNS

    [root@mhc1 dns]# pwd/root/test/k8s/kubernetes/cluster/addons/dns [root@mhc1 dns]# export DNS_SERVER_ ...

  9. python初步要点

    [python初步要点] #! 用于告诉操作系统去哪里找Python解释器为运行您的程序. 1.print 的输出有以下2种形式,""%()的形式类似于C的printf. 要注意逗 ...

  10. 03-SSH综合案例:商城表关系分析

    1.2   设计页面: 静态页面: 1.3    数据库分析与设计: 一般是一个Java类就对应一个表,有哪些类?那看你有哪些实体啊?一般一个模块对应一个实体 有用户模块就会有用户的一个实体,就会有用 ...