c - gmp 奇怪的行为不允许我编译新项目

标签 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

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

最佳答案

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" 更符合逻辑也更优雅之后(不是像您那样之前)包含标准 header (如 <stdio.h> )。

关于c - gmp 奇怪的行为不允许我编译新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47595750/

相关文章:

c - 为什么我的小程序崩溃了?

java - 找不到符号: method draw(AsciiDisplay)

c - 字符串输入到gmp整数的最大长度?

assembly - GMP- assembly 代码?

c - 表达式必须是结构指针上的可修改左值

c - 如何根据C中的匹配单词解析和排列csv文件的行?

c - 一种更好的大数相加方法,Project Euler #13

android-studio - Android studio 2.3.2上JNI编译错误

F# 编译器抛出 OutOfMemoryException

c - 使用 OpenMP 和 mpz_t malloc 导致段错误