Я хочу протестировать свою программу в другой ОС, но gcc
на самом деле не работает в Solaris, но есть cc
.
Вот как я компилирую с gcc:
gcc -c quicksort.c sched.c -g -pthread -O3
gcc -o quicksort quicksort.o sched.o -Wall -g -pthread -O3
Я пытался скомпилировать с помощью cc, используя те же аргументы, но вот что я получаю:
quicksort.c:
sched.c:
"sched.c", line 233: warning: argument #3 is incompatible with prototype:
prototype: pointer to function(pointer to void) returning pointer to void : "/usr/include/pthread.h", line 197
argument : pointer to void
ld: fatal : soname option (-h, --soname) is incompatible with building a dynamic executable
ld: fatal : flags processing errors
Вот строка с первой ошибкой:
pthread_create(&s->tab_thread[i], NULL, (void *) main_thread, new_args_sched(i, s));
new_args_sched
- это просто структура для передачи аргументов в функцию main_thread
Я не знаю, какой вариант мне использовать, я пробовал с -mt
и -lpthread
, но это не сработало У меня 3 файла quicksort.c
с основным, sched.h
и sched.c
Редактировать
Компьютер Solaris находится в ssh
, он не мой, и я не могу его настроить. Версия gcc
- 3.4.3
, использующая только C90
, мой код работает с C11
. Только cc
должно работать, но я не знаю, как правильно скомпилировать его ...
Я использую структуру для передачи main_thread
следующим образом:
struct sched_args {
int i;
struct scheduler *s;
};
struct sched_args *
new_args_sched(int i, struct scheduler *s) {
struct sched_args *args = malloc(sizeof(struct sched_args));
if(args == NULL)
return NULL;
args->i = i;
args->s = s;
return args;
}
и вот как я получаю это в своей функции, когда использую pthread_create:
void main_thread(void *closure) {
struct sched_args *args = (struct sched_args *)closure;
int i = args->i;
struct scheduler *s = args->s
/* doing something */
}