gmp奇怪的行为,不让我编译新项目

时间:2017-12-01 14:40:27

标签: c compiler-errors gmp

我使用此命令安装在我的ubuntu gmp上:

sudo apt-get install libgmp3-dev

它工作正常。 现在我正在尝试创建一个简单写作的新项目

  #include "gmp.h"
  #include <stdio.h>
  #include <time.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>




  int main(){

    mpz_t num;
    mpz_init(num);
    printf("%s\n",mpz_get_str (NULL, 10, num));

    mpz_clear(num);


   return 0;

  }

给我

> gcc -lgmp mil.c  /tmp/ccHvV9kT.o: In function `main':
> mil.c:(.text+0x1f): undefined reference to `__gmpz_init'
> mil.c:(.text+0x35): undefined reference to `__gmpz_get_str'
> mil.c:(.text+0x49): undefined reference to `__gmpz_clear' collect2:
> error: ld returned 1 exit status

我只是复制粘贴了我之前项目的代码,我得到了同样的错误(在我创建的所有函数中),但编译我的旧项目我没有得到任何错误。 我的问题是什么???

1 个答案:

答案 0 :(得分:2)

Order of arguments to gcc matters很多。

尝试使用(您需要警告和调试信息,所以)

 gcc -Wall -Wextra -g mil.c -lgmp -o milprog

然后运行./milprog。你可能想要use the gdb debugger

gdb ./milprog

并且您可能希望(出于基准测试目的)要求编译器优化,方法是添加-g之前的-O2 -march=native

了解use GNU make(或其他build automation工具,例如ninja),请参阅this

请务必使用git等版本控制系统。

顺便说一下,我发现在(之前没有,就像你之前)包含"gmp.h" 包含标准标题(如<stdio.h>)时,我会发现更合乎逻辑,更优雅。< / p>