PDA

View Full Version : مشکل در لینک شدن فایلهای obj



lexical_error
دوشنبه 31 شهریور 1393, 21:50 عصر
سلام دوستان
من از کتابخانه SDL برای نوشتن یه برنامه استفاده کردم منتها موقع لینک کردن این ارورها رو میده. مسیر فایلهای هدر و lib رو هم تو VisualStudio مشخص کردم براش ولی فکر میکنم نمیتونه library رو پیدا کنه!

error LNK2019: unresolved external symbol _SDL_GetKeyState referenced in function "public: virtual int __thiscall CInput::Update(void)" (?Update@CInput@@UAEHXZ)
error LNK2019: unresolved external symbol _SDL_EnableKeyRepeat referenced in function "public: virtual void __thiscall CInput::Init(void)" (?Init@CInput@@UAEXXZ)

درواقع به ازای هر function که استفاده کردم از این ارور هست!

omid_kma
دوشنبه 31 شهریور 1393, 23:55 عصر
علاوه بر مسیر باید اسم lib ها رو هم وارد کنید از این مسیر : Linker->input->Additional dependencies

lexical_error
سه شنبه 01 مهر 1393, 10:46 صبح
من از external build system استفاده میکنم ، این قسمت رو تنظیمات پیدا نکردم
123795

omid_kma
سه شنبه 01 مهر 1393, 14:46 عصر
ALT + F7 بزن داخل اون هستش.

lexical_error
سه شنبه 01 مهر 1393, 15:18 عصر
ALT + F7 بزن داخل اون هستش.
بله دوست عزیز منم همونجا رو نگاه کردم، تصویری هم که گذاشتم مربوط به همون قسمت هست اما
Additional dependencies نداره !

omid_kma
سه شنبه 01 مهر 1393, 19:23 عصر
پروژه رو از چه نوعی ساختید ؟!
اگر منظورتون از external build system از نوع Make File Project هست که این تنظیمات رو نداره
باید با کد load کنین http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx
راه بهتر اینه که یک پروژه از نوع کنسول بسازید properties داخلش تنظیمات مربوطه رو داره ...

lexical_error
چهارشنبه 02 مهر 1393, 21:22 عصر
این یه بازی OpenSource هست باید از یه فایل خاص برای کامپایلش استفاده کنم.تو روش بدون IDE با Cross Tools Command Prompt کامپایل میشه بدون مشکل اما وقتی تو VS براش Project میسازم به همون مشکل برمیخورم.بعد چون که یه کامپایلر خاصی داره مجبورم از External build استفاده کنم!
اون روش load کردن با کد رو هم تست کردم جواب نداد از
#pragma comment(lib, "SDL.lib") هم استفاده کردم جواب نداد!
جالب اینجاست بدون IDE کامپایل میشه!

بعد من یه پروژه جدید C++ تو VS ساختم طبق این آموزش هم عمل کردم و تغییرات رو انجام دادم ولی اونجا هم نتونستم نتیجه بگیرم!


http://lazyfoo.net/SDL_tutorials/lesson01/windows/msvsnet2010e/index.php

omid_kma
پنج شنبه 03 مهر 1393, 10:03 صبح
اون روش load کردن با کد رو هم تست کردم جواب نداد
احتمالا SDL.lib رو نمی تونه پیدا کنه .
مسیر SDL.lib رو به path دادید ؟
SDL.lib رو یکبار داخل مسیر build پروژه ببینید درست میشه.


بعد من یه پروژه جدید C++‎ تو VS ساختم طبق این آموزش هم عمل کردم و تغییرات رو انجام دادم ولی اونجا هم نتونستم نتیجه بگیرم!

1

http://lazyfoo.net/SDL_tutorials/lesson01/windows/msvsnet2010e/index.php

احتمالا یک قسمتشو دارید اشتباه انجام میدید وگرنه لینکی که دادید مشکلی نداره .

lexical_error
پنج شنبه 03 مهر 1393, 14:32 عصر
احتمالا SDL.lib رو نمی تونه پیدا کنه .
مسیر SDL.lib رو به path دادید ؟
SDL.lib رو یکبار داخل مسیر build پروژه ببینید درست میشه.



میشه بگین دقیقا چه کدی هست برای اضافه کردن lib ؟ چون من هر کدی که توی لینک هست تست کردم اصلا اجرا نمیشد یعنی تو intellisense هم چیزی نمیاورد. ممکنه بخاطر external build باشه؟

omid_kma
پنج شنبه 03 مهر 1393, 16:53 عصر
pragma comment که ماکرو هست و زمان link کردن obj ها میاد lib رو لینک می کنه با pragma comment وقتی اسمlib رو میدید یا باید lib توی مسیر پروژه باشه یا داخل path های تعیین شده تا بتونه پیداش کنه
LoadLibrary بر خلاف prgma comment زمان اجرا این کارو می کنه و چون اسم توابع رو نمی دونه باید هر تابعی که استفاده میشه با استفاده از تابع GetProcAddress و اسم تابع فانکشن پوینتر مربوطه رو بدست بیارید بعد اونو صدا بزنید
یک مثال این جا هست http://msdn.microsoft.com/en-us/library/windows/desktop/ms686944%28v=vs.85%29.aspx
برای دادن مسیر هم باید از این تابع استفاده کنین http://msdn.microsoft.com/en-us/library/ms686203%28VS.85%29.aspx

ممکنه بخاطر external build باشه؟
پروژه ای که می خواهید build کنید رو آپلود کنید بزارید ببینم ایرادش چیه.