使用带有 GMP 库错误 : "ld: symbol(s) not found for architecture x86_64" 的 GCC 编译 C 程序

标签 c macos gcc gmp

我正在尝试编译一个使用 GMP 库中的许多函数的 C 程序 (gfp2.c)。我使用正常的配置、制作和安装顺序下载并安装了 GMP 库。我也在安装前运行了 make check 并且没有错误。

我正在使用 GMP 5.1.1、GCC 4.2.1 和 MAC OS 10.8.2。

我首先键入 gcc gfp2.c -lgmp 链接库,然后尝试 gcc gfp2.c 并在终端上获得以下输出:

1407-wn-172-21-30-223:pqcrypto11_scripts dfish$ gcc gfp2.c -lgmp 

v1407-wn-172-21-30-223:pqcrypto11_scripts dfish$ gcc gfp2.c

Undefined symbols for architecture x86_64:

  "___gmp_printf", referenced from:
      _print_GF in ccrft0vq.o

  "___gmp_randinit_default", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmp_sprintf", referenced from:
      _get_GF in ccrft0vq.o

  "___gmpz_add", referenced from:
      _add_GF in ccrft0vq.o
      _mul_GF in ccrft0vq.o
      _sqr_GF in ccrft0vq.o

  "___gmpz_add_ui", referenced from:
      _add_GF_ui in ccrft0vq.o

  "___gmpz_addmul", referenced from:
      _inv_GF in ccrft0vq.o

  "___gmpz_clear", referenced from:
      _clear_GF in ccrft0vq.o
      _setup_GF in ccrft0vq.o
      _free_GF in ccrft0vq.o

  "___gmpz_cmp", referenced from:
      _cmp_GF in ccrft0vq.o

  "___gmpz_cmp_ui", referenced from:
      _is_one_GF in ccrft0vq.o

  "___gmpz_fdiv_ui", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmpz_init", referenced from:
      _init_GF in ccrft0vq.o
      _setup_GF in ccrft0vq.o

  "___gmpz_init_set_str", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmpz_init_set_ui", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmpz_invert", referenced from:
      _inv_GF in ccrft0vq.o
      _a24 in ccrft0vq.o

  "___gmpz_mod", referenced from:
      _add_GF in ccrft0vq.o
      _add_GF_ui in ccrft0vq.o
      _sub_GF in ccrft0vq.o
      _sub_GF_ui in ccrft0vq.o
      _scalar_GF in ccrft0vq.o
      _scalar_GF_si in ccrft0vq.o
      _mul_GF in ccrft0vq.o
      ...

  "___gmpz_mul", referenced from:
      _scalar_GF in ccrft0vq.o
      _mul_GF in ccrft0vq.o
      _sqr_GF in ccrft0vq.o
      _inv_GF in ccrft0vq.o

  "___gmpz_mul_2exp", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmpz_mul_si", referenced from:
      _scalar_GF_si in ccrft0vq.o

  "___gmpz_neg", referenced from:
      _inv_GF in ccrft0vq.o

  "___gmpz_pow_ui", referenced from:
      _setup_GF in ccrft0vq.o

  "___gmpz_set", referenced from:
      _copy_GF in ccrft0vq.o
      _add_GF_ui in ccrft0vq.o
      _sub_GF_ui in ccrft0vq.o
      _neg_GF in ccrft0vq.o

  "___gmpz_set_str", referenced from:
      _set_GF in ccrft0vq.o

  "___gmpz_set_ui", referenced from:
      _shamir in ccrft0vq.o
      _a24 in ccrft0vq.o

  "___gmpz_sizeinbase", referenced from:
      _mont_3ladder in ccrft0vq.o
      _shamir in ccrft0vq.o

  "___gmpz_sub", referenced from:
      _sub_GF in ccrft0vq.o
      _neg_GF in ccrft0vq.o
      _mul_GF in ccrft0vq.o
      _sqr_GF in ccrft0vq.o

  "___gmpz_sub_ui", referenced from:
      _setup_GF in ccrft0vq.o
      _sub_GF_ui in ccrft0vq.o

  "___gmpz_tstbit", referenced from:
      _mont_3ladder in ccrft0vq.o
      _shamir in ccrft0vq.o

  "___gmpz_urandomm", referenced from:
      _random_GF in ccrft0vq.o

ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我对 C 编程和使用库等还很陌生,真的不知道自己在做什么,所以非常感谢您的帮助。谢谢!

最佳答案

您的第一次尝试已经完成了编译和链接。您不需要执行第二步。如果您检查您的目录,您会发现一个名为 a.out 的文件,它是您需要的可执行文件。

关于使用带有 GMP 库错误 : "ld: symbol(s) not found for architecture x86_64" 的 GCC 编译 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857859/

相关文章:

c - 即使设置了 sysroot,ld.exe 也找不到/lib/libc.so.6

c++ - GCC 警告初始化顺序与声明顺序不匹配

c - 如何从字符串中删除换行符

C 结构解释 Push_vlan = (struct vlan_header *)((uint8_t *)new_eth + eth_size);

objective-c - 如何获得 MacOS 上特定用户的首选语言?

java - 在 Java 中创建文件时如何在 Mac OS X 中提供文件路径?

swift - SceneKit 导入的 COLLADA 框不是 "Lit"

c - 整数立方根

c - gsocket(服务器模式)出现错误?

c - 使用 A Vedaldi 的 sift 实现