Я не могу использовать pthread в оконной платформе
-
21-12-2019 - |
Вопрос
Моя среда — Windows8.1 (64-разрядная версия) и я использую Visual Studio 2010.
Я поместил все файлы *.dll в system32, SYSWOW64 (потому что я использую 64-битную версию Win8).
и ссылку на расположение файла *.lib для x64-системы с VC 2010.
конечно, я добавляю дополнительные папки lib forders.., включить папки..и т. д..
но когда я пытаюсь скомпилировать проект с использованием pthread, возникает фатальная ошибка.
-источник
#include<pthread.h>
#include<stdio.h>
int doit_id,trd_id;
pthread_t trd;
void *doit(void *data){
doit_id = (int)data;
return 0;
}
int main(){
trd_id=pthread_create(&trd,NULL,doit,0);
return (0);
}
-ошибка
1.obj : error LNK2019: unresolved external symbol __imp__pthread_create (referenced in function _main)
C:\Users\~program Location~ : fatal error LNK1120: 1 unresolved externals
пожалуйста, помогите мне
Решение
Тот факт, что ваш main()
ищет имя __imp__pthread_create
указывает, что вы создаете свой проект для 32-битной системы.
64-разрядная библиотека Win32 pthread имеет символ импорта для pthread_create()
с именем:
__imp_pthread_create
32-битная библиотека Win32 pthread имеет:
__imp__pthread_create
Обратите внимание на дополнительное подчеркивание в 32-битной библиотеке, которое соответствует соглашению об именах, которое main()
ищет, поэтому это признак того, что вы создаете 32-битную цель.Дополнительное подчеркивание является частью того, как сборки x86 обрабатывают имена в соглашении о вызовах cdecl, используемом библиотекой Win32 pthread.x64 не использует соглашение о вызовах cdecl (x64 имеет только одно соглашение о вызовах), и символы подчеркивания не добавляются к символам в сборках x64.
Я думаю, вам нужно либо загрузить, либо собрать 32-битную библиотеку pthread, либо изменить конфигурацию проекта для сборки для 64-битной цели.