لینک کردن در ویندوز



  • p{direction:rtl;text-align:right}. سلام
    من نمی‌تونم توی ویندوز چیزی رو لینک کنم. یک کتابخانهٔ ویجت نوشتم که توی لینوکس به‌راحتی کامپایلش می‌کنم و به همهٔ برنامه‌ها بدون مشکل لینک میشه. همون کد روی ویندوز کامپایل می‌شه اما هر برنامه‌ای که می‌خواد بهش لینک کنه، با ارورهای
    @
    undefined reference
    @

    p{direction:rtl;text-align:right}. مواجه میشه.

    p{direction:rtl;text-align:right}. الان متوجه شدم که توی ویندوز کلن هیچ کتابخونه‌ای رو نمی‌تونم لینک کنم! هر دو فایل dll و .a رو هم لینک دادم به پروژه اما نشد.

    p{direction:rtl;text-align:right}. محتویات فایل .pro:
    @
    LIBS += -lmywidgets
    @

    p{direction:rtl;text-align:right}. که فایل‌های libmywidgets.a و mywidgets.dll توی مسیر مناسب قرار گرفتن.

    p{direction:rtl;text-align:right}. کلن شما چجوری چیزی رو لینک میدید؟



  • [quote author="soroush" date="1337798025"]
    p{direction:rtl;text-align:right}. الان متوجه شدم که توی ویندوز کلن هیچ کتابخونه‌ای رو نمی‌تونم لینک کنم! هر دو فایل dll و .a رو هم لینک دادم به پروژه اما نشد.
    [/quote]

    p{direction:rtl; text-align:right}. من تابحال با لینک کردن توی ویندوز مشکلی نداشتم. از این روش هم توی لینوکس استفاده میکنم و هم توی ویندوز:
    @
    INCLUDEPATH += "مسیر فایل های header"
    LIBS += "مسیر فایل های static/LIBRARY.a"
    @



  • p{direction:rtl;text-align:right}. استاتیک‌ش رو نمی‌خوام. به یه dll می‌خوام لینک بدم.
    ظاهراً توی ویندوز Symbol Table رو خود کامپایلر درست نمی‌کنه و باید مشخص کنی که چه چیزایی رو می‌خوای export کنی. کیوت هم دو تا ماکرو برای این کار داره. ولی هنوز طرز کار درست‌شون رو یاد نگرفتم.



  • p{direction: rtl; text-align:right}. برای mingw میتونی با استفاده از reimp سیمبل ها رو اکسپورت کنی و فایل .a رو بسازی ولی در هر حال فایل .a و header ها رو باید داشته باشی. symbol ها که مطمئن باش داخل تمامی فایل های dynamic هستن. تنها راه پیدا کردن آدرس یک تابع توی فایل بررسی symbol ها هست. در ضمن کامپایلر رو هر پلتفرمی که باشه یکجور عمل میکنه و کارش تولید instruction برای cpu هست.



  • p{direction: rtl; text-align:right}. راستی مگه توابعت رو extern نکردی؟



  • p{direction: rtl; text-align:right}. reimp چیه؟
    نه extern نکردم. از ماکروی Q_DECL_EXPORT استفاده کردم، درست شد. اما ویجت‌هایی که ساختم رو نمی‌تونم به‌صورت پلاگین داخل Qt Creator بذارم.

    p{direction: rtl; text-align:right}. مشکلم اینه که یک کتابخونهٔ ویجت دارم، می‌خوام براش پلاگین دیزاینر بسازم که بتونم ویجتها رو ببینم. برای همین مشکل لینک کردن، پروژهٔ ویجت‌ها رو از پروژهٔ پلاگین جدا کردم. الان برنامه‌ها می‌تونن از ویجت‌ها استفاده کنن. همچنین پروژهٔ پلاگین به ویجت‌ها لینک می‌کنه. اما خود پلاگین کار نمی‌کنه. نمی‌تونم توی Designer یا Creator ویجت‌ها رو ببینم. به هیچ صراطی مستقیم نیست. خیلی مسخره‌ست که مجبوریم توی ویندوز هر چیزی رو که می‌خوایم توی جدول سمبل‌ها باشه مشخص کنیم.



  • p{direction: rtl; text-align:right}. reimp یکی از ابزارهای mingw هست برای ویندوز تا بتونی از dll ها خروجی .a بگیری.
    البته منم چند وقت پیش میخواستم به ابزار های QtCreator اضافه کنم ولی موفق نشدم.



  • p{direction: rtl; text-align:right}. ممنون حل شد. مجبور شدم MSVS 2008 رو نصب کنم و کتابخونه ویجتها رو دوباره با اون کامپایل کنم. الان تو Qt Creator هستن.



  • p{direction: rtl; text-align:right}. خواهش میکنم. به نظر من کلا استفاده از vs برای کامپایل توی ویندوز خیلی بهتره.



  • [quote author="Mohsen" date="1338181939"]p{direction: rtl; text-align:right}. خواهش میکنم. به نظر من کلا استفاده از vs برای کامپایل توی ویندوز خیلی بهتره.[/quote]

    p{direction: rtl; text-align:right}. راحت تره اما امنیت نداره. خیلی زود دکامپایل میکنن و برنامه رو میریزن بیرون. از سی++ 2011 هم که کلن پشتیبانی نمیکنه



  • [quote author="soroush" date="1338559362"]
    p{direction: rtl; text-align:right}. راحت تره اما امنیت نداره. خیلی زود دکامپایل میکنن و برنامه رو میریزن بیرون. [/quote]

    p{direction:rtl; text-align:right}. مرسی که گفتی! من روی این قضیه خیلی حساسیت دارم


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.