如何在Solaris中使用cc编译c?

时间:2018-05-11 11:30:25

标签: c solaris cc

我想在不同的操作系统中测试我的程序,但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只是将args传递给函数main_thread

的结构

我不知道应该使用哪个选项,我尝试使用-mt-lpthread,但它没有用。我有3个文件quicksort.c,主文件为sched.hsched.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 */
}

0 个答案:

没有答案