【问题标题】:GMP Library, compile error in C++, MinGW, Code::BlocksGMP 库,C++、MinGW、Code::Blocks 中的编译错误
【发布时间】:2012-04-22 15:54:30
【问题描述】:

我已经为 MinGW 构建了 GMP。我使用的 IDE 是 Code::Blocks。我对 GMP 的 C 函数没有任何问题。但是我遇到了 C++ 的问题。我尝试运行的程序就是这么简单,

#include<iostream>
#include<gmpxx.h>
using namespace std;

main()
{
    mpz_class a;
    a=12345;
    cout<<"value"<<a<<"\n";
    return 0;
}

我得到的错误是

F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osmpz.o):osmpz.cc|| undefined reference to `__gmpz_get_str'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osfuns.o):osfuns.cc:(.rdata+0x1c)||undefined reference to `__gmp_asprintf_memory'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osfuns.o):osfuns.cc:(.rdata+0x20)||undefined reference to `__gmp_asprintf_reps'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osdoprnti.o):osdoprnti.cc|| undefined reference to `__gmp_doprnt_integer'|
F:\Compilers\C_Libraries\GMP\lib\libgmpxx.a(osdoprnti.o):osdoprnti.cc|| undefined reference to `__gmp_asprintf_final'|
||=== Build finished: 5 errors, 0 warnings ===|

现在,一些额外的数据:

  1. 我对 C 函数没有任何问题。而且,如果我删除 cout
  2. libgmpxx.a 和 libgmp.a 与编译器链接。也可以在错误消息中看到...
  3. 问题可能仅出在 libgmpxx.a 上。所以,我再次构建了库,但文件是相同的。
  4. 我使用本教程使用 MSYS 为 MinGW 构建 GMP。 http://www.cs.nyu.edu/exact/core/gmp/http://suchideas.com/journal/2007/07/installing-gmp-on-windows/
  5. 我使用的 GMP 版本是 5.0.4。

那么,我想知道的是,可能是什么问题?又该如何解决? 并且,如果无法解决并且您有 5.0.4 版本的工作文件,请分享。 :(

【问题讨论】:

    标签: c++ mingw codeblocks gmp


    【解决方案1】:

    我怀疑构建程序的命令以错误的顺序指定了libgmp* 库。确保在libgmpxx.a 库之后指定libgmp.a 库:

    -lgmpxx -lgmp
    

    如果以其他顺序指定,则在从libgmpxx.a 库中拉取依赖项时,将不会搜索libgmp.a 库。

    来自ld linker's docs on the -l option

    链接器只会在存档位置搜索一次 在命令行中指定。如果档案定义了一个符号 在存档之前出现的某些对象中未定义 在命令行上,链接器将包含适当的文件 从档案中。但是,对象中出现未定义的符号 稍后在命令行上不会导致链接器搜索 再次存档。

    查看 -( 选项以了解强制链接器搜索档案的方法 多次。

    您可以在命令行上多次列出同一个存档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多