ورود

View Full Version : حرفه ای: مشکل در کامپایل کردن برنامه استفاده شده از Lib Boost



farzadfree
دوشنبه 27 مرداد 1393, 18:46 عصر
با سلام خدمت همه دوستان و سروران گرامی ،

موارد اصلی :

1- سیستم عامل : 7-64bit
2- gcc/g++ 1.4.9
3- Code::Blocks IDE 13.12

سوال : قبل از هر چیز باید بگم که مثال اولیه خود boost که یک ورودی میگیره صربدر 2 میکنه رو کامپایل کردم و مشکلی نداشته مطمئنا در فراخوانی کتابخانه ها مشکل دارم ، در ادامه کامپایل کردن برنامه ای که با کتابخانه Boost نوشته شده (وب سرور) به مشکل برخوردم و الان چند روزیه منو مشغول خودش کرده ، مواردی که من در اجرا و نصب انجام دادم را در زیر منویسم :

من در main.cpp هم هدر های زیر را اضافه کردم ولی بازم نشد :



#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#define WIN32_LEAN_AND_MEAN


1- ابتدا مراحل زیر را برای نصب (تبدیل به آبجکت کردن کتابخانه های مورد نیاز) و مسیر دهی انجام دادم -> لینک نصب (http://wiki.codeblocks.org/index.php?title=BoostWindowsQuickRef)

2- در ide در قسمت های ذکر شده موارد مورد نظر را نوشتم :

در قسمت setting -> compiler -> compiler setting در تب compiler flags موارد تیک فلگ های زیر را انتخاب کردم


-o
-std=C++‎‎11
-WALL

در قسمت setting -> compiler -> compiler setting در تب other option موارد زیر را نوشتم


-lws2_32 -lwsock32 -lboost_system


در قسمت setting -> compiler -> linker setting در بخش link libraries تمامی موارد تولید شده بصورت آبجکت را انتخاب کردم
در قسمت setting -> compiler -> linker setting در بخش Other Linker option تمامی موارد زیر را نوشتم



-lstdC++‎‎
-lgcc
-lodbc32
-lwinspool
-lwinmm
-lshell32
-lcomctl32
-lodbc32
-ladvapi32
-lodbc32
-lopengl32
-lglu32
-lole32
-loleaut32
-luuid

در قسمت setting -> compiler -> search directories در تب compiler موارد مسیر فایل های هدر boost و g++ را قرار دادم



%Path%\C++‎‎\CPP_Library\boost_1_55_0
%Path%\C++‎‎\CPP_Library\mingw-seh\mingw64\include


در قسمت setting -> compiler -> toolchian executables هم تمامی مسیر های مربوط به کامپایلر gcc و g++ را مسیردهی کردم

البته در setting -> variabels نیز مسیر دهی محل نصب کتابخانه و فایل های هدر و مسیر اصلی boost را دادم.

لیست خطا ها :




obj\Debug\connection.o:connection.cpp:(.text+0x48) : undefined reference to `__imp_WSACleanup'
obj\Debug\connection.o:connection.cpp:(.text+0x33f ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x38d ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x6b7 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x6cb ): undefined reference to `__imp_WSASetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x709 ): undefined reference to `__imp_WSASend'
obj\Debug\connection.o:connection.cpp:(.text+0x710 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x716 ): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x720 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x72e ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x737 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x78a ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x7fb ): undefined reference to `__imp_WSASetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x804 ): undefined reference to `__imp_closesocket'
obj\Debug\connection.o:connection.cpp:(.text+0x80b ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x814 ): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x82a ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x875 ): undefined reference to `__imp_ioctlsocket'
obj\Debug\connection.o:connection.cpp:(.text+0x884 ): undefined reference to `__imp_WSASetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x88d ): undefined reference to `__imp_closesocket'
obj\Debug\connection.o:connection.cpp:(.text+0x894 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x89d ): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x8af ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x973 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0xbb7 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0xc81 ): undefined reference to `__imp_WSARecv'
obj\Debug\connection.o:connection.cpp:(.text+0xc8a ): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0xcd0 ): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x14a 8): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x155 6): undefined reference to `__imp_WSASend'
obj\Debug\connection.o:connection.cpp:(.text+0x155 e): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x159 5): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x17d 1): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x18e 2): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x1e2 6): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x1e3 2): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x1e4 6): more undefined references to `boost::system::system_category()' follow
obj\Debug\connection.o:connection.cpp:(.text+0x308 f): undefined reference to `__imp_WSASend'
obj\Debug\connection.o:connection.cpp:(.text+0x309 7): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x30c f): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x338 7): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x339 e): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x33a b): undefined reference to `__imp_WSASetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x33b 9): undefined reference to `__imp_shutdown'
obj\Debug\connection.o:connection.cpp:(.text+0x33c 0): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x33c 6): undefined reference to `__imp_WSAGetLastError'
obj\Debug\connection.o:connection.cpp:(.text+0x33c f): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x33d 4): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x33d b): undefined reference to `boost::system::system_category()'
obj\Debug\connection.o:connection.cpp:(.text+0x380 3): undefined reference to `boost::system::system_category()'



لطفا کمکم کنید

مسعود اقدسی فام
دوشنبه 27 مرداد 1393, 19:14 عصر
من دقیق متوجه نشدم که چی به چیه. اما در مورد رفع خطای کدتون فقط می‌تونم این نظر رو بدم که:
بر اساس لیستی که اینجا گذاشتید منبع همه‌ی خطاها به احتمال زیاد از نبود یه منبع مشترک هست. من اگه جای شما بودم همون سطر اول خطا رو به صورت جداگانه گوگل جستجو می‌کردم و حلش می‌کردم. به اختمال زیاد سایر موارد هم حل بشه.

کامبیز اسدزاده
دوشنبه 27 مرداد 1393, 19:17 عصر
دقیقا طبق گفته جناب مسعود اقدسی فام جستجو کنید.

http://stackoverflow.com/questions/18559028/undefined-reference-to-imp-wsacleanup
http://stackoverflow.com/questions/2352332/undefined-references-when-including-boost-library

farzadfree
دوشنبه 27 مرداد 1393, 19:27 عصر
من تمامی موارد را جستجو کردم ولی تمامی موارد با توجه به اینکه خودتون هم سرچ کردید دقیقا موارد و مراحل و option های هدر کامپایل که منم گذاشتم رو راهنمایی کردن دوستان.
در واقع عزیزان اگه سرچ نکرده بودم که اینحا نمیومدم من تو IRC:#boost هم پرسیدم جوابشون همون چیزایی که من نوشتم ولی حل نشد

farzadfree
دوشنبه 27 مرداد 1393, 19:32 عصر
بطور مثال لینک دوم جناب اسدزاده در پارامتر های ماکرو ورودی در g++ هست که اگه دقت کنید منم نوشتم

motherboard
دوشنبه 27 مرداد 1393, 19:41 عصر
وقتی داری کامپایل می کنی ایا کامپایل با موفقیت انجام میشه؟؟ منظورم اینه که حتی اگه برنامه ران نشه ایا کامپایل انجام میشه؟برو یکبار دیگه کامپایل کن و ببین ایا موقع کامپایل خبری از ارور هست ویا نه؟

omid_kma
دوشنبه 27 مرداد 1393, 19:50 عصر
این ارور ها مربوط به لینکر هستن کامپایلر lib ها رو نشناخته
من جایی از پستتون ندیدم که مسیر lib ها رو داده باشید
از این مسیر lib ها رو یکی یکی اضافه کنین Setting -->Compiler-->linker setting




وقتی داری کامپایل می کنی ایا کامپایل با موفقیت انجام میشه؟؟ منظورم اینه که حتی اگه برنامه ران نشه ایا کامپایل انجام میشه؟برو یکبار دیگه کامپایل کن و ببین ایا موقع کامپایل خبری از ارور هست ویا نه؟

خب این لیستی که این بنده خدا آخر پستش گذاشته ارور کامپایل هستن دیگه !!

motherboard
دوشنبه 27 مرداد 1393, 20:01 عصر
این ارور ها مربوط به لینکر هستن کامپایلر lib ها رو نشناخته
من جایی از پستتون ندیدم که مسیر lib ها رو داده باشید
از این مسیر lib ها رو یکی یکی اضافه کنین Setting -->Compiler-->linker setting
نحوه استفاده از library داخل codeblocks :
http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

من هم با شما موافقم و از همون اول به این لینکر شک کردم.البته هنوز اون دوست عزیز جواب سوال من رو نداد چون اگر موقع کامپایل ارور هم به وجود بیاد اون وقت مواردی غیر از لینکر هم می تونه دخیل باشه.
حتی یکی از نشانه های خطای لینکر اینه که وقتی برنامه رو کامپایل می کنیم در قسمت پایین مدام پیغام سرازیر میشه.

farzadfree
دوشنبه 27 مرداد 1393, 20:01 عصر
این ارور ها مربوط به لینکر هستن کامپایلر lib ها رو نشناخته
من جایی از پستتون ندیدم که مسیر lib ها رو داده باشید
از این مسیر lib ها رو یکی یکی اضافه کنین Setting -->Compiler-->linker setting
نحوه استفاده از library داخل codeblocks :
http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

بله عزیز جان اگه دقت کنی منم اضافه کردم و تو سوالم هم نوشته بودم اینم متنش دوباره مینویسم


"در قسمت setting -> compiler -> linker setting در بخش link libraries تمامی موارد تولید شده بصورت آبجکت را انتخاب کردم"

farzadfree
دوشنبه 27 مرداد 1393, 20:04 عصر
وقتی داری کامپایل می کنی ایا کامپایل با موفقیت انجام میشه؟؟ منظورم اینه که حتی اگه برنامه ران نشه ایا کامپایل انجام میشه؟برو یکبار دیگه کامپایل کن و ببین ایا موقع کامپایل خبری از ارور هست ویا نه؟

دوست عزیز کامپایل انجام میشه و تمامی فایل های من لینک و در نهایت آجکت میشند( o فایل) ولی آخرش که میخواد به exe تبدیل شود و بقیه لینک ها رو اضافه کند نمیتونه و کل خطا میده که اونا رو هم نوشتم براتون لیستشو

motherboard
دوشنبه 27 مرداد 1393, 20:21 عصر
دوست عزیز کامپایل انجام میشه و تمامی فایل های من لینک و در نهایت آجکت میشند( o فایل) ولی آخرش که میخواد به exe تبدیل شود و بقیه لینک ها رو اضافه کند نمیتونه و کل خطا میده که اونا رو هم نوشتم براتون لیستشو
بیش تر از این نمی تونم کمکت کنم چون دیگه وسعم نمیرسه.ولی همین قدر بدون که همه ی اون خطا ها یی که گذاشتی در واقع یک خطای کوچک هستش.لینکر ها یک نقص کوچولویی دارند.شاید یک موردی رو یادت رفته.

omid_kma
دوشنبه 27 مرداد 1393, 20:27 عصر
بله عزیز جان اگه دقت کنی منم اضافه کردم و تو سوالم هم نوشته بودم اینم متنش دوباره مینویسم


"در قسمت setting -> compiler -> linker setting در بخش link libraries تمامی موارد تولید شده بصورت آبجکت را انتخاب کردم"
بصورت آبجکت منظورتون فایل های با پسوند .o هست ؟!
اگر آره که درست نیست یا باید .dll اضافه کنین یا .a
من الان یک پروژه تست رو کامپایل کردم با codeblock و boost مشکلی نداره
این کارایی که داخل پستتون انجام دادین لازم نیست
شما 2 کار باید بکنین
1_ محل include ها رو بدید Setting compiler search directory
2_ محل library ها setting compiler linker settings

farzadfree
دوشنبه 27 مرداد 1393, 20:42 عصر
بصورت آبجکت منظورتون فایل های با پسوند .o هست ؟!
اگر آره که درست نیست یا باید .dll اضافه کنین یا .a
من الان یک پروژه تست رو کامپایل کردم با codeblock و boost مشکلی نداره
این کارایی که داخل پستتون انجام دادین لازم نیست
شما 2 کار باید بکنین
1_ محل include ها رو بدید Setting compiler search directory
2_ محل library ها setting compiler linker settings

دوست گرامی کدی که شما نوشتی رو نمیدونم ولی مطمئنا از کتابخونه خاصی استفاده نمیکرده مثل پروژه تست خوده boost که اونم توشتم منم مشکل نداشتم ولی پروژه ای که با سوکت کار میکنه و http server هستش میبینی که به این سادگی هم نیست .
مواردی رو هم که زحمت کشیدی نوشتی در نوشته های خودم گذاشتم که انجامش دادم (عزیز پست منو به دقت نخوندی) در مورد آبجکت هم فکر کنم اشتباهی رخ داده یا منظورمو درست نگفتم، گرامی جان من اگر از o فایل چیزی گفتم عرض کردم که پروژم کامپایل میشود و تبدیل به آبجکت میشه ولی آخر داستان که میخواد با باقی آبجکت ها لینک کنه و exe بسازه نمیشه (اینا رو تو سوالی که رضاس1000 (http://barnamenevis.org/member.php?320555-%D8%B1%D8%B6%D8%A7%D8%B31000) گرامی پرسید عرض کردم!!!!!!)

omid_kma
دوشنبه 27 مرداد 1393, 20:50 عصر
دوست گرامی کدی که شما نوشتی رو نمیدونم ولی مطمئنا از کتابخونه خاصی استفاده نمیکرده مثل پروژه تست خوده boost که اونم توشتم منم مشکل نداشتم ولی پروژه ای که با سوکت کار میکنه و http server هستش میبینی که به این سادگی هم نیست .
مواردی رو هم که زحمت کشیدی نوشتی در نوشته های خودم گذاشتم که انجامش دادم (عزیز پست منو به دقت نخوندی) در مورد آبجکت هم فکر کنم اشتباهی رخ داده یا منظورمو درست نگفتم، گرامی جان من اگر از o فایل چیزی گفتم عرض کردم که پروژم کامپایل میشود و تبدیل به آبجکت میشه ولی آخر داستان که میخواد با باقی آبجکت ها لینک کنه و exe بسازه نمیشه (اینا رو تو سوالی که رضاس1000 (http://barnamenevis.org/member.php?320555-%D8%B1%D8%B6%D8%A7%D8%B31000) گرامی پرسید عرض کردم!!!!!!)
اتفاقا به همین سادگی که گفتم هست من از regex استفاده کردم که lib جداگانه داره .

farzadfree
دوشنبه 27 مرداد 1393, 22:37 عصر
اتفاقا به همین سادگی که گفتم هست من از regex استفاده کردم که lib جداگانه داره .

یعنی همین الان boost رو نصب کردی و از کتابخانه regex استفاده کردی چون تو لینک های lib بقول خودتون a.* و lib.* یا dll.* باید باشند و نیاز به کامپایل برای تولیدشون میخوایم .

یعنی تو این 1 ساعت استفاده کردی و تست کردی :متعجب:

motherboard
دوشنبه 27 مرداد 1393, 22:58 عصر
داستان جالب شد.از جناب omid_kma (http://barnamenevis.org/member.php?323331-omid_kma) تقاضا دارم که مرا هم راهنمایی کنند.اتفاقا کد بلاکس رو هم دارم.

motherboard
سه شنبه 28 مرداد 1393, 00:37 صبح
بی خیال عنوان تاپیک :لبخند:
اصلا boost چی هست؟من کد بلاکس رو دارم.ممنون میشم که فایل رو ضمیمه کنید.می خوام من هم یک امتحانی بکنم.

omid_kma
سه شنبه 28 مرداد 1393, 01:23 صبح
یعنی همین الان boost رو نصب کردی و از کتابخانه regex استفاده کردی چون تو لینک های lib بقول خودتون a.* و lib.* یا dll.* باید باشند و نیاز به کامپایل برای تولیدشون میخوایم .

یعنی تو این 1 ساعت استفاده کردی و تست کردی

دوست عزیز من codeblocks رو قبلا داشتم
boost رو هم بصورت build شده هم با mingw و هم با vs دارم داخل Qt creator , visual studio استفاده می کنم.
ولی داخل codeblocks تا حالا تست نکرده بودم که امروز عصر تست کردم مشکلی نداشت 5 دقیقه هم نشد !
تمام چیزی که اضافه کردم :
http://barnamenevis.org/attachment.php?attachmentid=122433&d=1408399806
http://barnamenevis.org/attachment.php?attachmentid=122434&d=1408400000
http://www.7khatcode.com/?qa=blob&qa_blobid=7656362140648966519

کدی که کامپایل کردم : http://beta.boost.org/doc/libs/1_31_0/libs/regex/example/snippets/credit_card_example.cpp


بی خیال عنوان تاپیک :لبخند:
اصلا boost چی هست؟من کد بلاکس رو دارم.ممنون میشم که فایل رو ضمیمه کنید.می خوام من هم یک امتحانی بکنم.
متن ویکیپدیا :
Boost is a set of libraries (http://en.wikipedia.org/wiki/Library_(computer_science)) for the C++‎‎‎‎‎‎‎‎‎‎‎‎ programming language (http://en.wikipedia.org/wiki/C%2B%2B_programming_language) that provide support for tasks and structures such as linear algebra (http://en.wikipedia.org/wiki/Linear_algebra),pseudorandom number generation (http://en.wikipedia.org/wiki/Pseudorandom_number_generator), multithreading (http://en.wikipedia.org/wiki/Thread_(computer_science)), image processing (http://en.wikipedia.org/wiki/Image_processing), regular expressions (http://en.wikipedia.org/wiki/Regular_expression), and unit testing (http://en.wikipedia.org/wiki/Unit_testing). It contains over eighty individual libraries.Most of the Boost libraries are licensed (http://en.wikipedia.org/wiki/Software_licence) under the Boost Software License (http://en.wikipedia.org/wiki/Boost_Software_License), designed to allow Boost to be used with both free (http://en.wikipedia.org/wiki/Free_software) andproprietary software (http://en.wikipedia.org/wiki/Proprietary_software) projects. Many of Boost's founders are on theC++‎‎‎‎‎‎‎‎‎‎‎‎ standards (http://en.wikipedia.org/wiki/ISO/IEC_14882) committee, and several Boost libraries have been accepted for incorporation into both Technical Report 1 (http://en.wikipedia.org/wiki/Technical_Report_1) and theC++‎‎‎‎‎‎‎‎‎‎‎‎11 (http://en.wikipedia.org/wiki/C%2B%2B11) standard.[1] (http://en.wikipedia.org/wiki/Boost_(C%2B%2B_libraries)#cite_note-1)
حجمش اندازه ای نیست که قابل ضمیمه شدن باشه !
از این جا دانلود کن http://www.boost.org/users/history/version_1_56_0.html
داکیومنت کلاس های مختلف هم این جاست http://www.boost.org/doc/libs/1_56_0/
تعدادی زیادی از کلاس های boost رو میشه فقط با include کردن استفاده کرد و نیازی به build کردن ندارن
یکسری کلاس مثل گراف , regex نیاز به build شدن هم دارن
اگر ویژوال استودیو دارید باینری ها بصورت آماده و build شده این جا هست https://sourceforge.net/projects/boost/files/boost-binaries/1.56.0/
نحوه بیلد کردن و استفاده داخل Qt creator هم این جا هست http://www.7khatcode.com/2133/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-boost-%D8%AF%D8%B1-qt-mingw?show=2133#q2133
برای codeblocks هم قسمت build کردن مشابه چیزی هست که داخل لینک بالاست ولی برای استفاده کردن یکم فرق داره که داخل 2 تا پست بالاتر گفتم .