LINUX.ORG.RU

c\c++ pthread & argc


0

0

подскажите что не так?
Вот что при сборке в с++
int main(int argc, char **argv){
..etc...
        if (argc != 2){
                fprintf(stderr, "Usage: %s <host name> \n", argv[0]);
                exit(1);
        }
        for(num_connect = 0; num_connect < 35; num_connect++){
//pthread.cc:34: ошибка: некорректное преобразование из 'void*' в 'void* (*)(void*)'
//pthread.cc:34: ошибка:   при инициализации 3 -го аргумента 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)'
                ret = pthread_create(&tid[num_connect], NULL, (void *)squirtIt, argv[1]);
        }
        for(num_connect = 0; num_connect < 35; num_connect++){
                pthread_join(tid[num_connect], NULL);
	}

А при сборке в Си
/tmp/cc8MIS1o.o: In function `main':
pthread.c:(.text+0xa8): undefined reference to `pthread_create'
pthread.c:(.text+0xd5): undefined reference to `pthread_join'
collect2: выполнение ld завершилось с кодом возврата 1
anonymous

> //pthread.cc:34: ошибка: некорректное преобразование из 'void*' в 'void* (*)(void*)'

> //pthread.cc:34: ошибка: при инициализации 3 -го аргумента 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)'

> ret = pthread_create(&tid[num_connect], NULL, (void *)squirtIt, argv[1]);

Русским языком написано про неправильное приведение типа. Наверно, там должно быть (argv + 1) вместо argv[1].

> А при сборке в Си

> /tmp/cc8MIS1o.o: In function `main':

> pthread.c:(.text+0xa8): undefined reference to `pthread_create'

> pthread.c:(.text+0xd5): undefined reference to `pthread_join'

> collect2: выполнение ld завершилось с кодом возврата 1

-lpthread или -pthread, не помню точно.

gaa ★★
()

ret = pthread_create(&tid[num_connect], NULL, squirtIt, (void*)argv[1]);

и функция squirtIt должна иметь прототип:

void * squirtIt(void * arg)

Vinick ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.