窗户
源代码分发
从Cygwin到MinGW的交叉编译
在Windows中从源代码编译Julia的推荐方法是从https://www.cygwin.com [Cygwin]使用通过Cygwin包管理器提供的MinGW-w64编译器版本。
-
下载并运行Cygwin安装程序https://cygwin.com/setup-x86.exe [32位]或https://cygwin.com/setup-x86_64.exe [64位系统]。 请注意:您可以使用Cygwin的32位或64位版本编译Julia的32位或64位版本。 在Cygwin的64位版本中,软件包集略小,但它们通常更具最新性。
另外:可以通过运行以下命令跳过步骤2—4:
setup-x86_64.exe -s <url> -q -P cmake,gcc-g++,git,make,patch,curl,m4,python3,p7zip,mingw64-i686-gcc-g++,mingw64-i686-gcc-fortran,mingw64-x86_64-gcc-g++,mingw64-x86_64-gcc-fortran
将"<url>"替换为网站地址https://cygwin.com/mirrors.html 或者,首先手动运行安装,然后选择镜像。
-
选择将执行下载的安装位置和镜像。
-
在_Select Packages_步骤中,选择以下值。
-
在_evel_(开发)类别中:'cmake','pass:c[gcc-g++]
,'git
,'make','patch` -
在_Net_(网络)类别中:'curl'
-
在_Interpreters_(解释器)(或_Python_)类别中:'m4','python3'
-
在_Archive_(存档)类别中:'p7zip'
-
对于Julia的32位版本,以及_Devel_(开发)类别:'pass:c[mingw64-i686-gcc-g++]'和’mingw64-i686-gcc-fortran'
-
对于Julia的64位版本,以及_evel_(开发)类别:`pass:c[mingw64-x86_64-gcc-g++]`和`mingw64-x86_64-gcc-fortran'。
-
-
等待Cygwin安装完成,然后分别使用已安装的快捷方式_cygwin Terminal_(Cygwin终端)或_Cygwin64Terminal_(Cygwin64终端)启动环境。
-
从源代码构建Julia和依赖项。
-
获取Julia源代码
git clone https://github.com/JuliaLang/julia.git cd julia
委员会。 如果Git返回错误’error:cannot fork()for fetch-pack:Resource 暂时不可用`,添加’alias git="env PATH=/usr/bin git"` 到'~/。bashrc’并重新启动Cygwin。
-
在’Make’中设置`XC_HOST’变量。用户配置MinGW-w64交叉编译的文件
echo 'XC*HOST = i686-w64-mingw32' > Make.user # для 32-разрядной версии Julia # или echo 'XC*HOST = x86_64-w64-mingw32' > Make.user # для 64-разрядной версии Julia
-
运行构建
make -j 4 # Настройте количество потоков (4) в соответствии со средой сборки. make -j 4 debug # В результате создается файл julia-debug.exe
-
-
直接使用Julia可执行文件运行Julia
usr/bin/julia.exe usr/bin/julia-debug.exe
!!! 注意"专业提示:构建两者!"
make O=julia-win32 configure
make O=julia-win64 configure
echo 'XC_HOST = i686-w64-mingw32' > julia-win32/Make.user
echo 'XC_HOST = x86_64-w64-mingw32' > julia-win64/Make.user
echo 'ifeq ($(BUILDROOT),$(JULIAHOME))
$(error "in-tree build disabled")
endif' >> Make.user
make -C julia-win32 # сборка для Windows x86 в папке julia-win32
make -C julia-win64 # сборка для Windows x86-64 в папке julia-win64
link:@id Compiling-with-MinGW/MSYS2[使用MinGW/MSYS2编译]
https://www.msys2.org /[MSYS2]是Windows的软件分发和构建环境。
注意。 MSYS2需要Windows7或更高版本的*64位版本*。
-
安装和配置MSYS2。
-
下载并运行最新版本的安装程序https://github.com/msys2/msys2-installer/releases/latest [64位]分布。 安装程序将具有类似`msys2-x86_64-yyyymmdd的名称。exe'。
-
打开MSYS2外壳。 更新包数据库和基本包:
pacman -Syu
-
退出并重新启动MSYS2。 更新其余的基本包:
pacman -Syu
-
-
然后安装构建Julia所需的工具。:
pacman -S cmake diffutils git m4 make patch tar p7zip curl python
对于64位版本的Julia,请安装版本x86_64:
pacman -S mingw-w64-x86_64-gcc
对于Julia的32位版本,请安装i686版本。:
pacman -S mingw-w64-i686-gcc
-
MSYS2设置完成。 现在关闭("退出")MSYS2。 2壳。 使用预组装的依赖项构建Julia和依赖项。
-
打开一个新的https://www.msys2.org/docs/environments/#overview [MINGW64/MINGW32外壳]。 目前,您不能在同一时间使用mingw32和mingw64,因此如果您想构建版本x86_64和i686,则需要在每个环境中单独执行此操作。
-
克隆Julia源代码:
git clone https://github.com/JuliaLang/julia.git cd julia
-
运行构建
make -j$(nproc)
!!! 注意"专业提示:在dir中构建"
make O=julia-mingw-w64 configure echo 'ifeq ($(BUILDROOT),$(JULIAHOME)) $(error "in-tree build disabled") endif' >> Make.user make -C julia-mingw-w64
-
link:@id Cross-compiling-from-Unix-(Linux/Mac/WSL)[从Unix(Linux,Mac,WSL)交叉编译]
您还可以使用mingw-w64交叉编译器从Linux、Mac或Windows子系统For Linux(WSL)构建Julia Windows版本。
首先,您需要确保系统中存在必要的依赖项。 您将需要wine(版本1.7.5或更高版本),系统编译器和一些加载器。 注意。 使用WSL时Cygwin安装可能会阻止此方法的执行。
在Ubuntu中(在其他Linux系统中,依赖项名称很可能类似):
apt-get install wine-stable gcc wget p7zip-full winbind mingw-w64 gfortran-mingw-w64
dpkg –add-architecture i386 && apt-get update && apt-get install wine32
# switch all of the following to their "-posix" variants (interactively):
for pkg in i686-w64-mingw32-g++ i686-w64-mingw32-gcc i686-w64-mingw32-gfortran x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc x86_64-w64-mingw32-gfortran; do
sudo update-alternatives --config $pkg
done
在Mac上:安装XCode,XCode命令行程序,X11(现在https://www.xquartz.org /[XQuartz])和https://www.macports.org/install.php [MacPorts]或https://brew.sh /[自制软件]。 然后运行命令’port install wine wget mingw-w64’或’brew install wine wget mingw-w64',视情况而定。
接下来,执行装配:
-
'git克隆https://github.com/JuliaLang/julia.git 朱莉娅-win32`
-
'cd朱莉娅-win32`
-
'回声复盖XC_HOST=i686-w64-mingw32>>制作。用户`
-
'制造`
-
'make win-extras'(在执行’make binary-dist’之前需要)
-
'make binary-dist’然后’make exe’创建Windows安装程序。
-
转移安装程序的julia-*。exe’到目标计算机。
为64位版本的Windows构建时,步骤将基本相同。 只需将`XC_HOST`中的`i686`替换为’x86_64’即可。 (注。 在Mac上,wine仅在32位模式下运行。)
调试Windows构建
GDB冻结在Cygwin mintty
-
在Windows控制台(cmd)中运行GDB。 GDB,GDB https://www.cygwin.com/ml/cygwin/2009-02/msg00531.html [可能无法正常工作]在mintty与应用程序不是为Cygwin环境设计的。 如有必要,您可以使用命令’cmd/c start’从mintty启动Windows控制台。
GDB未连接到所需的进程
-
使用来自Windows任务管理器的PID或来自`ps`命令输出的`WINPID',而不是来自Unix风格的命令行程序(例如,
pgrep
)的PID。 如果默认情况下未在Windows任务管理器中显示PID列,则可能需要添加PID列。
GDB输出不正确的回溯
-
当连接到Julia进程时,GDB可能不会连接到相应的线程。 使用’info threads’命令输出所有线程,使用`thread<threadno>`命令切换线程。
-
请务必使用32位版本的GDB调试32位Julia构建,使用64位版本的GDB调试64位Julia构建。
构建过程很慢,消耗大量内存或冻结计算机。
-
禁用Windows服务https://en.wikipedia.org/wiki/Windows_Vista_I/O_technologies#SuperFetch [Superfetch]和https://blogs.msdn.com/b/cjacks/archive/2011/11/22/managing-the-windows-7-program-compatibility-assistant-pca.aspx[程序兼容性助手],因为它是已知的,他们进行https://cygwin.com/ml/cygwin/2011-12/msg00058.html [虚构的互动]与MinGW/Cygwin。
如上面的链接所示,通过单击任务管理器中的进程,可以找到"svchost"进程过度消耗内存的原因。exe’并通过选择’转到服务’选项。 一次关闭一个儿童服务,直到找到罪魁祸首。
-
谨防来自https://cygwin.com/faq/faq.html#faq.using …布罗达[布罗达名单]。 要识别与此类软件相关的冲突,您离不开工具。 https://technet.microsoft.com/en-us/sysinternals/dd535533 …aspx[vmmap]。 使用vmmap,检查下载的DLL库列表以查找bash,mintty或用于构建的另一个持久进程。 实际上,任何不是来自Windows系统目录的DLL库都可能是BLOD冲突的原因。