Я клонировал и построил репозиторий riscv-tools на моей машине ubuntu. Привет, мировая программа работает хорошо.Поддерживает ли RISCV инструментальную цепочку библиотеку pthread?
Теперь я пытаюсь перенести приложение из цели X86 в цель riscv (RV32IM). Мое приложение зависит от библиотек math и pthread. У меня возникают проблемы при попытке использовать объявления из заголовочного файла pthread.h в моем коде.
Я сделал очень простой пример кода, чтобы продемонстрировать свою проблему.
Вот мое содержимое файла example.c
#include <stdio.h>
#include <math.h>
#include <pthread.h>
int main(void)
{
float my_float;
int rc;
pthread_t my_thread;
pthread_mutex_t my_lock;
printf("Example start!\n");
my_float = sqrt(16.0);
printf("sqrt(16.0) = %f\n", my_float);
rc = pthread_mutex_init(&my_lock, NULL);
printf("return code from pthread_mutex_init() is %d\n", rc);
printf("Example End!\n");
return 0;
}
Ok и вот моя командная строка для компиляции для целевой RISCV
riscv64-unknown-elf-gcc -Wall -m32 -march=RV32IM -o example example.c -lm -lpthread
Вот вывод компилятора:
example.c: In function 'main':
example.c:10:3: error: unknown type name 'pthread_t'
pthread_t my_thread;
^
example.c:11:3: error: unknown type name 'pthread_mutex_t'
pthread_mutex_t my_lock;
^
example.c:19:3: warning: implicit declaration of function 'pthread_mutex_init' [-Wimplicit-function-declaration]
rc = pthread_mutex_init(&my_lock, NULL);
^
example.c:10:13: warning: unused variable 'my_thread' [-Wunused-variable]
pthread_t my_thread;
^
Обратите внимание, что нет никакой проблемы с математической библиотекой, но материал библиотеки pthread дает ошибки.
Очевидно, что компиляция этого простого примера для цели X86 работает как шарм. Выход программы для целевого X86 является:
> ./example
Example start!
sqrt(16.0) = 4.000000
return code from pthread_mutex_init() is 0
Example End!
Это то, что мы должны в конечном итоге получить, когда он компилирует и работает на цель RISCV при этом:
spike pk ./example
В чем проблема с PTHREAD библиотеки в цепочке инструментов RISCV? Может ли кто-нибудь из сообщества RISCV воспроизвести его? Кто-нибудь испытывает ту же проблему?
Любая помощь приветствуется!