Trying to link Boost 1.52 thread
Asked Answered
C

4

9

I am trying to compile my program but it wouldn't link at all. I have specified the path to the boost lib files and the linker still complain. Here's the linking error I got:

1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UAE@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::detach(void)" (?detach@thread@boost@@QAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::join(void)" (?join@thread@boost@@QAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "private: void __thiscall boost::thread::start_thread(void)" (?start_thread@thread@boost@@AAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "bool __cdecl boost::this_thread::interruptible_wait(void *,struct boost::detail::timeout)" (?interruptible_wait@this_thread@boost@@YA_NPAXUtimeout@detail@2@@Z)

BOOST_LIB_DIAGNOSTIC returns

1>  Linking to lib file: libboost_thread-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_date_time-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_system-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_chrono-vc100-mt-s-1_52.lib

More info:

I am running a 64-bit Windows 8 Pro and I compiled boost with the following option

bjam --build-type=complete --toolset=msvc10.0 address-model=64 architecture=x86 variant=debug,release threading=multi link=static runtime-link=static

Can someone tell me what is wrong?

Update:

After changing to boost 1.51 it got rid 7 out of 8 of those linker errors but this one is still persistent

error LNK2001: unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)

I don't get what is going on here. This one is from boostpro 32 bit installer. It couldn't have something to do with my source file right?

Update :

Ok I have solved this problem for boost 1.51. Turns out in the Property Pages >> C/C++ >> Code Generation >> Enable C++ Exceptions was turn off for me.

OK. I will attempt to see if the same settings solve the problem for boost 1.52. Will update later.

Claus answered 3/2, 2013 at 16:3 Comment(3)
Can't help you much, but I have been using prebuilts from boost-pro it is a prebuilt boost package with with installerKlink
Yeah I am trying to get the 1_51 build via boost pro now to see if I can get it to work.Claus
Good catch on enabling exceptions. It worked in my case.Enjoy
A
1

I had the same problem before: I build boost lib with default parameters which run bootstrap.bat directly.

if you use boost::system in your project, you should use and appoint x86 or x64 version of boost::system lib.

you can recompile boost lib with this bat, save these to boost root folder and run it in CMD windows(don't double click!):

call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86

cd boost_1_60_0
call bootstrap.bat

rem Most libraries can be static libs
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64
b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32

pause

for more details you can see this article: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

Aiaia answered 17/4, 2016 at 8:45 Comment(0)
P
0

Be sure to add the right directories into the linker properties.

Read this post to further details Boost linker error: Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"

Also you've got to add this path into Linker addition directories:

$(BOOST_ROOT)\bin.v2\libs\thread\build\msvc-xx.0\release\address-model-64\link-static\threading-multi

where xx is your visual studio version

Playbook answered 3/2, 2013 at 17:34 Comment(7)
Hi, I stumbled upon that post before I post my question. Have done the stuff stated there but still no luck.Claus
Can you post here your Linker addition directories?Playbook
$(BOOST)stage\lib\;$(LibraryPath) BOOST is C:\Dev\boost_1_52_0\Claus
Another tips. If you are using Visual Studio please note that you must close it before it can read new enviroment varibles. For example in Visual studio 2005 you've got to close ALL the instances of VS2005.Playbook
yeah I am aware of that actually. So every time I change my environment var. I will restart my VS to factor in the change.Claus
Search on your disk for the .lib and add the containing directory directly into linker additional directories. I'm quite sure that a similar setup is good for me at work. Tomorrow I'll check it for youPlaybook
You've got to add this path into Linker addition directories: $(BOOST_ROOT)\bin.v2\libs\thread\build\msvc-10.0\release\address-model-64\link-static\threading-multiPlaybook
A
0

Thank looks to me like its no auto linking correctly.

Include path is boost152/ only
Library path is boost152/stage/lib
Also answered 3/2, 2013 at 17:41 Comment(1)
Hmm... I went and did a counter check. I have set my environment variables as such: '$(BOOST) = %DEV%\boost_1_52_0\' where '%DEV% is C:\Dev\' and in the VC++ directory under property I had the following: 'Include : $(BOOST)' 'Library : $(BOOST)stage\lib\'Claus
C
0

These two defines below were messing up with my linker, throwing one beautiful "LNK2001: unresolved external symbol" error. Do you have then somewhere in your code?

//#define BOOST_FILESYSTEM_NO_DEPRECATED
//#define BOOST_FILESYSTEM_NO_LIB
Contumacious answered 7/12, 2014 at 3:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.