我在使用以下程序编译程序时遇到问题:
最新的Msys和MinGW安装 Windows 7 Pro / Intel Core I5 / 8GB
GMP 5.1.2库 - 头文件位于C:\ gmp \ include中 - .a和.la文件位于C:\ gmp \ lib
中我最初将此作为Eclipse问题发布,但沉默已经震耳欲聋。我已经尝试在msys中使用gcc编译,我遇到了同样的问题。我使用编译:
g ++ -I / c / gmp / include -O0 -g3 -Wall -c -fmessage-length = 0 -o main.o ./main.cpp
似乎已成功完成。然后我使用:
链接g ++ -L / c / gmp / lib -o GMPDebug.exe main.o
结果:
main.o:在函数main':
C:\Users\Clay\workspace\GMPDebug\Debug/../main.cpp:22: undefined reference to
__ gmpz_init_set_str'中
collect2.exe:错误:ld返回1退出状态
该程序非常简单 - 足以让库运行起来:
#include <getopt.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <iostream>
#include <gmpxx.h>
#include <gmp.h>
using namespace std;
int main ()
{
mpz_t p;
mpz_init_set_str (p,"3",10);
return 0;
}
所有这些包括因为我从较大的程序中减少了这一点。知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:2)
这是使用Eclipse CDT,MinGW和msys for C ++设置当前(截至7月2日)GNU bignum库的正确过程。为了解决这个问题,您之前应该使用Unix或Linux,以及Windows,您应该对编程和编译程序有一个模糊的回忆。这是一个多星期的研究和铁杆挫败感的高潮,所以如果我搞砸了一些东西,请用礼貌的方式记下它,否则我会用我的力量打击你!
1)我假设您已经下载并安装了Eclipse和MinGW,并已将msys安装到MinGW中。你必须在msys之前安装MinGW!
2)从gmplib.org下载GMP库的tarball到$ {gmp_download}。我下载了gmp-5.1.2.tar.xz,因为我从未使用过lzip,也不知道它是否在msys中可用。
3)打开一个msys窗口(本质上是一个bash shell)。 cd $ {gmp_buid}和tar -Jxvf $ {gmp_download} /gmp-x.x.x.tar.xz
这些tar选项与您在网络上的其他地方有所不同! -jxvf适用于xz(我认为是lzip),但对于gzip,你使用-xzvf。
4)cd gmp-x.x.x并运行./config.guess。记下输出。你接下来需要它。
5)运行./configure --prefix = $ {gmp_build} --build =&lt; config.guess output&gt; --enable-cxx --with-gnu-ld
显然,如果您没有明确告诉GMP为您的平台构建,那么它会构建所有内容,这很糟糕。 cxx选项构建C ++库, - with-gnu-ld允许它与ld一起使用。很简单。
6)制作
7)make install
EX:假设你安装到C:/ gmp。你应该有gmp / include / gmp.h和gmpxx.h。你还应该有gmp / lib / libgmp.a,libgmp.la,libgmpxx.a,libgmpxx.la。您还应该有一个包含内容的共享目录。
8)设置eclipse:
9)运行此简短程序以验证您的设置:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
using namespace std;
int main ()
{
mpz_t p;
mpz_init_set_ui (p,3);
return 0;
}
您的编译命令应该类似于:
g ++“ - IC:\ gmp \ include”-O0 -g3 -Wall -c -fmessage-length = 0 -lgmp -lgmpxx -o main.o“.. \ main.cpp”
g ++“ - LC:\ gmp \ lib”-o GMPDebug.exe main.o -lgmpxx -lgmp
注意:
1)选项的顺序很重要。我不知道所有的问题,但如果第二个命令行(链接程序)在-o选项之前有-lgmp -lgmpxx标志,则链接将失败。
2)-l标志是一个棘手的标志。它实际上是说“Go-in&lt; whatever&gt; for liblibrary.a”。在这种情况下,“在C:\ gmp \ lib中查找libgmp.a和libgmpxx.a”。
3)我听说过涉及cout和64位版eclipse的bug,所以我使用的是32位版本,我看到同样的bug。 : - (
4)如果在链接器中将gmp放在gmpxx之前,那么重载的运算符将无效。