macOS 上的 Libsodium,x86_64 的未定义符号

Libsodium on macOS, undefined symbols for x86_64

我使用的是英特尔 Mac 运行 Catalina 10.15.1

我正在尝试通过 gcc Apple clang version 11.0.0 (clang-1100.0.33.12)

使用 libsodium

我都尝试通过 home-brew 安装 libsodium 并手动编译(成功),但是,在尝试使用 libsodium 时出现此错误:

Undefined symbols for architecture x86_64:
  "_crypto_generichash", referenced from:
      _main in sodium-ae2fd0.o
  "_sodium_init", referenced from:
      _main in sodium-ae2fd0.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是基本代码,使用libsodium: stable 1.0.18 (bottled), HEAD

  1 #include <sodium.h>
  2
  3 int main(void)
  4 {
  5
  6     sodium_init();
  7
  8     #define MESSAGE ((const unsigned char *) "Arbitrary data to hash")
  9     #define MESSAGE_LEN 22
 10
 11     unsigned char hash[crypto_generichash_BYTES];
 12
 13     crypto_generichash(hash, sizeof hash,
 14                        MESSAGE, MESSAGE_LEN,
 15                        NULL, 0);
 16
 17     return 0;
 18 }

有什么想法吗?

问题可能不在于 libsodium 安装,而在于您的示例应用程序的编译方式。

为了在编译C程序时link一个库(除了隐式linked的C库之外),需要在编译中添加-l<library name>标志命令行:

cc -Wall -W -o example example.c -lsodium