"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل أخطاء رابط LNK2001 في مشاريع C وC++ المختلطة في VS2010؟

كيفية حل أخطاء رابط LNK2001 في مشاريع C وC++ المختلطة في VS2010؟

تم النشر بتاريخ 2024-12-21
تصفح:998

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

حل أخطاء الرابط في مشاريع C و C المختلطة في VS2010

وصف المشكلة

أدى دمج كود C في مشروع C في مشاريع VS2010 المختلفة إلى في خطأ في الارتباط عند استدعاء دالة C من كود C. الخطأ، الذي تم تعريفه باسم LNK2001، يتعلق برمز خارجي لم يتم حله.

الحل

لتصحيح هذه المشكلة، تأكد من التنظيم السليم لقاعدة التعليمات البرمجية من خلال الالتزام بإرشادات محددة:

  1. كود الوحدات:

      يجب على كل وحدة لغة C يتألف من ملف رأس واحد وملف مصدر واحد.
    • حافظ على الاتساق في اصطلاحات التسمية لكل من الملفات ووحدات الماكرو.
  2. إنشاء رؤوس وملفات التنفيذ:

      تحديد الوظائف في ملفات الرأس (على سبيل المثال، jobs.h) وتنفيذها في الملفات المصدر (على سبيل المثال، jobs.c).
  3. إدارة الصادرات والواردات:

      استخدم الماكرو FUNCTIONS_EXPORT_API لوضع علامة على الوظائف للتصدير (أو الاستيراد) في ملف الرأس.
    • عند تضمين الرأس في المشروع الذي يستخدم الوظائف، لا تحدد FUNCTIONS_EXPORT_API (أو تحديد الماكرو بقيمة الاستيراد الخاصة به).
    • تأكد من أن المشروع الذي يقوم بتصدير الوظائف يحتوي على ماكرو FUNCTIONS_EXPORT محدد (تلقائيًا أو يدويًا) قبل تضمين الرأس.
مثال كود

functions.h

#pragma مرة واحدة #تعريف FUNCTIONS_EXPORT_API #إذا تم تعريفه(__cplusplus) خارجي "ج" { #endif FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**); FUNCTIONS_EXPORT_API char *g_fmt(char*, double); FUNCTIONS_EXPORT_API void freedtoa(char*); #إذا تم تعريفه(__cplusplus) } #endif
#pragma once

#define FUNCTIONS_EXPORT_API

#if defined(__cplusplus)
extern "C" {
#endif

FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**);
FUNCTIONS_EXPORT_API char *g_fmt(char*, double);
FUNCTIONS_EXPORT_API void freedtoa(char*);

#if defined(__cplusplus)
}
#endif
functions.c

#define FUNCTIONS_EXPORTS #تشمل "functions.h" شار * dtoa (مزدوج، int، int، int *، int *، char **) { // تنفيذ الوظيفة } شار *g_fmt(شار*، مزدوج) { // تنفيذ الوظيفة } باطلة freedtoa (شار *) { // تنفيذ الوظيفة

#define FUNCTIONS_EXPORTS
#include "functions.h"

char *dtoa(double, int, int, int*, int*, char**)
{
    // Function implementation
}

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}

تجنب استخدام محدد التخزين الخارجي في إعلانات الوظائف داخل الرأس.

    استخدم الماكرو الخاص بالمشروع (على سبيل المثال، EXPORTFUNCTIONSPROJECT_EXPORTS) للتشغيل الآلي الصادرات.
  • التحقق من أسماء الماكرو في خصائص المشروع ضمن المعالج المسبق التعريفات.
  • المشكلات ذات الصلة

خطأ LNK2005 في نموذج CLR Windows](https://stackoverflow.com/a/17362530/1128974)

    ]Excel VBA، لا يمكن العثور على نقطة إدخال DLL من ملف DLL ملف](https://stackoverflow.com/a/7214325/1128974)
  • [عند استخدام fstream في مكتبة أحصل على أخطاء رابط في الملف القابل للتنفيذ](https://stackoverflow.com/a/10068252 /1128974)
  • تصدير C dll غير محدد](https://stackoverflow.com/a/7709927/1128974)
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3