استفاده از boost در Qt mingw - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از boost در Qt mingw

+7 امتیاز
سلام بر همگی

من می خوام از boost توی Qt استفاده کنم بعضی از header ها هستن باهاشون مشکلی ندارم ولی از بعضی های دیگه مثل regexp میخوام استفاده کنم این ارور ها رو میده برنامم  چکار کنم ؟

: error: undefined reference to `boost::re_detail::put_mem_block(void*)'

: error: undefined reference to `boost::re_detail::raw_storage::resize(unsigned int)'

:-1: error: release/main.o: bad reloc address 0x6a in section `.text$_ZN5boost9re_detail19basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12append_stateENS0_19syntax_element_typeEj[__ZN5boost9re_detail19

basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12append_stateENS0_19syntax_element_typeEj]'
سوال شده اسفند 24, 1392  بوسیله ی Gre (امتیاز 41)   4 5
دوباره تگ گذاری شد اسفند 25, 1392 بوسیله ی BlueBlade

2 پاسخ

+6 امتیاز
 
بهترین پاسخ

دلیل این که با بعضی از hpp ها مشکل ندارین اینه که اونا کل کلاس بصورت template هست و inline داخل header تعریف شدن .

برای بقیه header ها مثل همون regexp که گفتین باید lib های boost رو build کنین .

برای build کردن به این شکل عمل کنین :

ورژن Qt من 5.2 mingw و ویندوز

ورژنboost_1_55_0  

اول این که boost رو از این جا دانلود کنید : http://www.boost.org/users/history/version_1_55_0.html

محلی که من boost رو extract کردم :

D:\Boost

محل نصب کیوت :

D:\Qt

قبل از هر کاری اول آدرس زیر رو به environment variable های ویندوز اضافه کنین :

D:\Qt\Tools\mingw48_32\bin

نکته : چون محل نصب من D:\Qt بود اگر محل نصبتون این نیست D:\Qt رو با محلی که نصب کردین عوض کنین 

بعد از آدرس

C:\Users\Lenovo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Qt 5.2.0\5.2.0\MinGW 4.8 (32-bit

فایل زیر رو باز کنین

Qt 5.2.0 for Desktop (MinGW 4.8 32 bit) 

حالا توی پنجره cmd باز شده دستور زیر را تایپ کنید :

cd D:\Boost\boost_1_55_0

نکته : این آدرس بسته به محل extract کردن boost فرق می کنه 

بعد این دستور

 bootstrap gcc

خب حالا باید یک سری نوشته ببینید که نوشته باشه

bootstrapping is done ,...

بعد یک پوشه جدید برای ساخته شدن lib ها بسازین مثلا من توی آدرس D:\Boost این فولدر زیر رو ساختم.

 boost_1_55_0_lib

خب حالا  این دستور رو وارد کنید : (لیست این دستورات توی لینک روبرو هست boost getting started on unix

bjam --build-dir=D:/Boost/boost_1_55_0_lib toolset=gcc stage



( اون D:/Boost/boost_1_55_0_lib هم بازم بسته به محل ریختن و محل ساختن پوشه فرق می کنه )
 
اینجا اگر تمام مراحل بالا رو درست انجام داده باشین boost شروع می کنه به build شدن که چند ساعتی طول میکشه 

بعد از build شدن می تونین فایل ها رو توی این مسیر پیدا کنید :

D:\Boost\boost_1_55_0\stage\lib

حالا  یک پروژه جدید بسازین و به .pro اینا رو اضافه کنین :

INCLUDEPATH += D:\Boost\boost_1_55_0
LIBS += D:\\Boost\\boost_1_55_0\\stage\\lib\\libboost_regex-mgw48-mt-1_55.a

 

دقت کنین در صورت استفاده از بقیه هدر ها مثل Graph  , ... باید آدرس فایل .a مورد نظر رو بهش بدین .

پاسخ داده شده اسفند 24, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده اسفند 24, 1392 بوسیله ی مصطفی ساتکی
ممنون مشکلم حل شد :)
0 امتیاز
سلام.من طبق این آموزش جلو رفتم ولی در نهایت توی فلدری که تعیین کرده بودم 2 تا فلدر architecture  و bin.v2 اومد و اون دو خطی که گفتید رو هم به فایل .pro اضافه کردم ولی کار نکرد.
ظاهرا آخرای کار یکم فرق داره با مثال شما .امکانش هست راهنمایی کنید؟
 
از کیوت 5.5 و boost 1.58 استفاده میکنم.
 
پاسخ داده شده تیر 24, 1394 بوسیله ی ehsan_faal (امتیاز 41)   1 4 7
...