لا يمكنني استخدام pthread في النظام الأساسي للنافذة

StackOverflow https://stackoverflow.com//questions/20020264

  •  21-12-2019
  •  | 
  •  

سؤال

البيئة الخاصة بي هي Windows8.1 (64 بت) وتستخدم Visual Studio 2010.

لقد قمت بوضع كافة ملفات *.dll في system32 و SYSWOW64 (لأنني أستخدم win8 64bit.)

وربط الموقع حيث ملف *.lib لنظام x64 مع VC 2010.

بالطبع، أقوم بإضافة مجلدات إضافية من طلبات lib..، تضمين المجلدات..إلخ..

ولكن عندما أحاول ترجمة مشروع "pthread-used"، حدث خطأ فادح.

-مصدر

#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 بت.

تحتوي مكتبة Win32 pthread ذات 64 بت على رمز استيراد لـ pthread_create() مع الاسم:

__imp_pthread_create

تحتوي مكتبة Win32 pthread ذات 32 بت على:

__imp__pthread_create

لاحظ الشرطة السفلية الإضافية في lib 32 بت - والتي تطابق اصطلاح الاسم الذي تستخدمه main() الذي تبحث عنه، فهذا مؤشر على أنك تقوم ببناء هدف 32 بت.تعد الشرطة السفلية الإضافية جزءًا من كيفية إنشاء x86 لمعالجة الأسماء في اصطلاح استدعاء cdecl الذي تستخدمه مكتبة Win32 pthread.لا يستخدم x64 اصطلاح استدعاء cdecl (يحتوي x64 على اصطلاح استدعاء واحد فقط) ولا يتم إضافة الشرطات السفلية مسبقًا إلى الرموز في إصدارات x64.

أعتقد أنك بحاجة إما إلى تنزيل أو إنشاء مكتبة pthread 32 بت أو تغيير تكوين مشروعك لإنشاء هدف 64 بت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top