【问题标题】:compiling multithreading C example with riscv gnu cross compiler使用 riscv gnu 交叉编译器编译多线程 C 示例
【发布时间】:2022-01-06 12:34:17
【问题描述】:

我在 mac 机器上使用 homebrew-riscv 工具链。

我想编译一个简单的多线程程序,该程序使用 riscv gnu 交叉编译器在 C 中使用 pthread 库编写。因此,我使用了以下命令:

riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 pthreadExample.c -o pthreadExample -lpthread

我收到以下警告和错误:

warning: implicit declaration of function 'pthread_create' [-Wimplicit-function-declaration]
   32 |         pthread_create(&tid, NULL, myThreadFun, (void *)&tid);
      |         ^~~~~~~~~~~~~~
pthreadExample.c:34:5: warning: implicit declaration of function 'pthread_exit' [-Wimplicit-function-declaration]
   34 |     pthread_exit(NULL);
      |     ^~~~~~~~~~~~
/opt/homebrew/Cellar/riscv-gnu-toolchain/master/lib/gcc/riscv64-unknown-elf/11.1.0/../../../../riscv64-unknown-elf/bin/ld: cannot find -lpthread
collect2: error: ld returned 1 exit status

有没有人有解决这个错误的想法?还是应该使用其他选项而不是 -lpthread 进行编译?

提前致谢

【问题讨论】:

  • 这是一个编译错误(-lpthread 是一个链接器命令)。尝试在该来源中包含<pthread.h>
  • @ErikEidt 感谢您的评论。 <pthread.h> 已包含在源代码中。
  • 试试-pthread。请参阅:Significance of -pthread flag when compiling
  • @ErikEidt 我已经尝试过了它导致了这个错误:riscv64-unknown-elf-gcc: error: unrecognized command-line option '-pthread'

标签: compilation pthreads riscv


【解决方案1】:

你使用的是裸机交叉编译器,你需要的是:

riscv64-unknown-linux-gnu-gcc

此外,您使用的是 -march=rv32i 标志,但您使用的是 64 位版本的编译器,这对我来说似乎不正确。如果目标机器是 32 位的,那么也许你应该使用 riscv32-unknown-linux-gnu-gcc

【讨论】:

  • 感谢您的回复。实际上,我为 multilib 安装了 risc v 交叉编译器,它也支持 32 位架构。
  • 好吧,这对 March 部分很有意义,但重点是您使用的是裸机交叉编译器:riscv64-unknown-elf-gcc 这意味着您正在为未运行操作系统的目标进行编译,因此没有pthreads。如果你切换到riscv64-unknown-linux-gnu-gcc,你应该可以使用-pthread。
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2011-08-24
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
相关资源
最近更新 更多