سؤال

لقد اكتشفت كيفية تعيين VC ++ لتجميع التعليمات البرمجية في ملف .LIB بدلاً من .exe ، لكنني أواجه مشكلة في الحصول على lib للربط مع ملفات .OBJ الأخرى.

إليكم كيف تم إعداد مجلدات المكتبة والتطبيق. (لست متأكدًا مما إذا كان هذا صحيحًا)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

وفي مكان آخر على القرص الصلب ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

لقد تم #includ في ملفات المكتبة *.H من ملفات CPP الخاصة بتطبيقي ، وكل شيء يجمع بشكل جيد. إنه فقط عندما يربط ، أحصل على قائمة بجميع ملفات .lib التي يتم البحث فيها ، و Library.lib ليست موجودة على الرغم من أنني أدرجت في أدلة VC ++. كيف يمكنني الحصول على هذا لربط؟ (وهل أقوم بتكييف مجلدات المكتبة بشكل صحيح؟)

هل كانت مفيدة؟

المحلول

في خصائص المشروع:

خصائص التكوين -> رابط -> إدخال -> تعتمدات إضافية

أضفه هناك.

أو ، في ملف .H الخاص بك للمكتبة ، أضف:

#pragma comment(lib, "Library")

هذا سيفعل ذلك تلقائيًا من أجلك.

نصائح أخرى

أدلة VC ++ هي قائمة مواقع الدليل التي تم البحث فيها أثناء الارتباط. إنها ليست قائمة بالمكتبات التي يجب ربطها.

تحتاج إلى إضافة ملف lib إلى التبعيات الإضافية مجال رابط المشروع الإعدادات.

للربط مع مكتبة ، يمكنك إما:

  • قم بإدراجها في Project-> Properties ...-> Linker ، input-> تعتمدات إضافية (أدلة VC ++ تتيح لك فقط استخدام اسم .lib بدلاً من المسار الكامل) ،
  • أضف مشروع المكتبة إلى تطبيقك. الحل (على الحل ، انقر بزر الماوس الأيمن -> إضافة -> المشروع الحالي ...) ، ثم استخدم Project -> Project Reporancies ... ، ثم تحقق من مشروع المكتبة الخاص بك (تأكد من تحديد مشروع التطبيق في المنسدلة). ربما تكون هذه هي أفضل طريقة للذهاب إذا كنت تقوم بتحرير كلا المشروعين ، حيث سيقوم VC ++ بإعادة بناء المكتبة إذا تغيرت قبل إنشاء تطبيقك.
  • إذا كنت متأكدًا من أنك ستستخدم فقط VC ++ ،

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (شكرًا @nils)

NB: يبدو من الغريب جدًا أن يكون لديك مجلد حل المكتبة الخاص بك داخل دليل "تضمين": وهو مخصص حقًا لـ *.h (أو غيره #includeملفات D).

من سطر الأوامر:

CL /EHSC {OBJFILES}+ /LINK /LIBPTH

حيث {objfiles}+ يعني ملف أو أكثر من ملفات أو CPP.

لا تربط VC ببساطة المكتبة إذا قمت بتضمين ملف الرأس.

عليك أن تخبر الرابط باستخدام المكتبة. لأسباب وجيهة: لديك الآلاف من libs في مجلد مكتبتك. إذا كان على MSVC البحث جميعًا في كل مرة تقوم فيها بربط برنامجك ، فسيتعين عليها أن تتجول من خلال Hundrets of Megabytes من البيانات.

سيستغرق ذلك بعض الوقت ، وبالتالي لم يتم ذلك افتراضيًا.

بالنسبة لـ VC ، يمكنك أيضًا إعطاء تلميح للرابط داخل المصدر الخاص بك. للقيام بذلك ، يمكنك إضافة السطر التالي في مكان ما في رمز المصدر الخاص بك (قد يكون رأس LIB مكانًا جيدًا).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

هذا ليس منصة مستقلة ولكن الطريقة الأكثر ملاءمة للحصول على LIB مرتبطة تلقائيًا بمشروع باستخدام MSVC.

طريقة أخرى هي ببساطة إضافة الرابط إلى إعدادات المشروع. يمكن العثور على المعلومات ذات الصلة Lin The Linker Protects of Your Project. لا تنس إضافة LIB إلى تكوينات الإصدار والتصحيح.

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