【发布时间】:2020-08-02 14:30:59
【问题描述】:
我想在 Windows 上使用 GMP,我需要构建静态程序。 (也就是说,如果有人可以提供另一种使用 libgmp 编译 win32 x86_64 程序的解决方案,我也将不胜感激。)
现在我已经安装了 msys2,并在其中执行了
pacman -S base-devel gcc
然后我从 gmplib.org 下载了 gmp-6.2.0.tar.lz 并将其解压缩到某个地方,比如
C:\Users\xxx\gmp-6.2.0
然后我用msys2 mingw64进入这个目录并执行
./configure
make
make check
make install
前两个命令似乎没问题,输出似乎是正确的。 但是,make check 并没有向我提供 make 是否正确。在其输出的末尾,它说,
make[5]: Leaving directory '/c/Users/Fred/gmp-6.2.0/tests/cxx'
make[4]: Leaving directory '/c/Users/Fred/gmp-6.2.0/tests/cxx'
make[3]: Leaving directory '/c/Users/Fred/gmp-6.2.0/tests/cxx'
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/tests'
Making check in mpn
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/mpn'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/mpn'
Making check in mpz
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/mpz'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/mpz'
Making check in mpq
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/mpq'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/mpq'
Making check in mpf
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/mpf'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/mpf'
Making check in printf
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/printf'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/printf'
Making check in scanf
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/scanf'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/scanf'
Making check in rand
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/rand'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/rand'
Making check in cxx
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/cxx'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/cxx'
Making check in demos
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/demos'
Making check in calc
make[3]: Entering directory '/c/Users/Fred/gmp-6.2.0/demos/calc'
make check-am
make[4]: Entering directory '/c/Users/Fred/gmp-6.2.0/demos/calc'
make[4]: Nothing to be done for 'check-am'.
make[4]: Leaving directory '/c/Users/Fred/gmp-6.2.0/demos/calc'
make[3]: Leaving directory '/c/Users/Fred/gmp-6.2.0/demos/calc'
Making check in expr
make[3]: Entering directory '/c/Users/Fred/gmp-6.2.0/demos/expr'
make[3]: Nothing to be done for 'check'.
make[3]: Leaving directory '/c/Users/Fred/gmp-6.2.0/demos/expr'
make[3]: Entering directory '/c/Users/Fred/gmp-6.2.0/demos'
make[3]: Nothing to be done for 'check-am'.
make[3]: Leaving directory '/c/Users/Fred/gmp-6.2.0/demos'
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/demos'
Making check in tune
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/tune'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/tune'
Making check in doc
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0/doc'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0/doc'
make[2]: Entering directory '/c/Users/Fred/gmp-6.2.0'
make[2]: Leaving directory '/c/Users/Fred/gmp-6.2.0'
make[1]: Leaving directory '/c/Users/Fred/gmp-6.2.0'
并且 make install 以类似的消息结束。最后,当我尝试编译程序时,它说,
/usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgmp
事实上,我不是专业的程序员,所以我不太清楚如何安装 GMP 为 mingw。如果有人能告诉我如何从头开始,我将不胜感激。
【问题讨论】:
-
MSYS2 有一个 GMP 包,名为
mingw-w64-x86_64-gmp。 -
感谢您的评论。但是,在我安装了这个包之后,我现在可以编译动态程序,但最近 pacman 只默认安装了动态库。如何安装静态库以便可以使用 -static 进行编译?
-
你说的“最近pacman只安装动态库”是什么意思?该软件包包含静态和动态库。要使链接器更喜欢静态链接器,请使用
-static构建。 -
我刚刚注意到您使用了错误的编译器。安装
mingw-w64-x86_64-gcc而不是gcc,并通过在“mingw64”模式下运行MSYS2确保它在PATH中(使用mingw64.exe,如果正确完成,它将在终端中显示MINGW64(洋红色) , 而不是您当前看到的MSYS)。 -
长话短说,MSYS2 的包中有 3 组编译器和库,目标是:1. 32 位窗口(包前缀为
mingw-w64-i686-),2. 64 位窗口(包前缀使用mingw-w64-x86_64-)和“MSYS”(无前缀包;主要用于 64 位窗口,with cygwin(更具体地说,是它们自己的分支))。您想使用 2(或 1,如果您需要 32 位)。远离 3,它仅用于将 Linux 实用程序移植到 Windows,专门用于开发目的,例如对于bash和make包。你的编译器和库应该来自带前缀的包。
标签: c mingw-w64 gmp msys2 cross-build