MPIR gcc 编译 - 找不到 -lmpir
Posted
技术标签:
【中文标题】MPIR gcc 编译 - 找不到 -lmpir【英文标题】:MPIR gcc compilation - cannot find -lmpir 【发布时间】:2015-06-03 16:26:09 【问题描述】:我正在尝试在我的 Windows 7 机器上的 MinGW 下使用带有 MPIR 的 GCC 编译一个简单的 C 程序。我使用 configure、make、make check 和 make install 成功安装了 MPIR(我猜)(没有使用“sudo” - 这是什么?)。
该程序名为“mytest.cpp”,位于MPIR的顶层文件夹,即C:/MPIR/mpir-2.7.0/,其中也有“mpir.h”(是“the”(正确的?有几个?)mpir.h?):
#include "mpir.h"
using namespace std;
int main ()
mpz_t z;
mpz_init(z);
return 0;
我尝试编译通过
gcc mytest.c -o mytest -lmpir -I/C:/MPIR/mpir-2.7.0/
希望 GCC 能够找到 mpir.h,“-lmpir”,因为一位乐于助人的开发人员告诉我这样做;但后来它说:
“C:/mingw/ [...] /bin/ld.exe: 找不到 -lmpir”
其中“[...]”代表“minGW”目录中的一些上下爬升的目录。但是,我目前使用的是 shell C:/MPIR/mpir-2.7.0/目录。
怎么了?如何让 GCC 找到 mpir 文件?编译选项“-I”应该拼写不同吗?我还听说过一些“-L”选项,但在任何地方都找不到。谢谢。
【问题讨论】:
【参考方案1】:改变
gcc mytest.c -o mytest -lmpir -I/C:/MPIR/mpir-2.7.0/
到
gcc mytest.c -o mytest -lmpir -IC:/MPIR/mpir-2.7.0/ -LC:/MPIR/mpir-2.7.0
您不需要在 C: 前面加上 /,并且 -L 标志告诉链接器在哪里可以找到您使用 -l 标志链接到的库。
另外,我建议使用包含和库的相对路径而不是绝对路径。
【讨论】:
谢谢,我试过了;它仍然“找不到-lmpir”。使用 "-v" 选项编译会产生以下结果: "... #include "..." 搜索从这里开始: [newline] #include <...> 搜索从这里开始: [newline] c:\mingw\ bin\../lib/gcc/mingw32/4.8.1/include [newline] ..." 和类似的;这是否表明编译器没有离开 MinGW 目录?但是,我确实将 MPIR 路径添加到 PATH 环境变量中,并且还在包含#included 文件的目录中工作...... ??? 尝试手动找到mingw目录下的libmpir.a。这就是您的 -L 标志需要指向的位置。 没有。然而,在 MPIR 目录中,有各种类似名称的文件,特别是 libmpir.la、libmpir.lai、libmpir.dll.a 等,第一个在顶部 mpir-2.7.0 目录中,其他文件在 . lib 子目录。但是,我确实执行了“make check”和“make install”,没有任何错误……如何检查安装是否成功?谢谢。 好的,这就是您需要使用 -L 标志指向的目录。所以你应该在编译/链接命令的最后加上 -lmplr -LC:\MPLR-or-whatever\path\to\lib。 是的......这就是我所做的......我使用的正是你写的,gcc mytest.c -o mytest -lmpir -IC:/MPIR/mpir-2.7.0/ -LC: /MPIR/mpir-2.7.0 。但是,是否缺少应该在构建过程中生成的文件“libmpir.a”?它仍然没有找到任何 mpir 库。【参考方案2】:好的,我修好了。 总结一下,关键点是: - gcc 选项的顺序很重要:“-o mytest”需要到最后,“-lname”在“-Ldir”之前但之后; - 路径末尾应该有“.libs”,因为这是库所在的位置(即使它们不需要命名为 libmpir.a) - (至少在 MinGW 中)工作格式是 c:/MPIR/mpir-2.7.0/.libs (因此是绝对的,也来自 /usr/local/ 或其他地方)
例如起作用的是:
$ gcc mytest.c -Lc:/MPIR/mpir-2.7.0/.libs -lmpir -o mytest $ gcc mytest.c -Lc:/MPIR/mpir-2.7.0/.libs -lmpir.dll -o mytest
最好的。
【讨论】:
嗯。两周后(没有尝试),上面的编译仍然没有错误,但是通过“mytest”执行程序时,它抱怨“由于缺少libmpir-16.dll,无法启动程序。重新安装程序。 "但是这个文件实际上位于 C:/MPIR/mpir-2.7.0/.libs 目录中(而例如 mpir.a 或 libmpir.a 不是!)...还是我需要在其他地方寻找它?我已将 MinGW/bin 和 mpir-2.7.0/ 路径添加到 PATH 环境变量中......没有改进。他们还能在哪里,应该在哪里?以上是关于MPIR gcc 编译 - 找不到 -lmpir的主要内容,如果未能解决你的问题,请参考以下文章
使用 CentOS 6.4 在 Python 2.7 上修复“警告:未找到 GMP 或 MPIR 库;未构建 Crypto.PublickKey._fastmath”错误