|
Boost Users : |
Subject: Re: [Boost-users] Many undefined references for libboost_filesystem
From: Alex Perry (Alex.Perry_at_[hidden])
Date: 2017-10-19 07:46:55
Glad to hear youâve made progress - these things can be frustrating to say the leastâ¦.
I canât really remember the issues for old gcc versions (it was 5 years or so ago since I last used 4.x gcc) but there are resources listing abi breakages https://gcc.gnu.org/wiki/Cxx11AbiCompatibility as far as I can remember it was just best to recompile all dependencies making sure the compiler flags didnât ever differ â later gccâs were better for this but using clang became our preferred solution.
Once youâve gone down the line of rebuilding every dep then you may as well use a newer compiler rather than the one used by the particular linux packager.
It does mean you canât just apt-get X-devel to get X (since that will be built with the wrong compiler and so may or may not work but regardless is a risk) which is a slight pain â but tbh linux packages are always a bit of a hacky solution and donât fit well with anyone who is building software x-platform (or even X-linux variants)â ie they may make life a bit simpler for a trivial case but generally you need to control how all parts of your solution are built and short cuts like pre-built binaries tend to come back to bite you eventually.
A.
From: mahmood n [mailto:nt_mahmood_at_[hidden]]
Sent: 19 October 2017 07:59
To: Alex Perry <Alex.Perry_at_[hidden]>
Cc: boost-users_at_[hidden]
Subject: RE: [Boost-users] Many undefined references for libboost_filesystem
I used another gcc version 4.5 (Ubuntu 11.04) and it works without any problem!
I donât know what is wrong with gcc-4.6. Though the problematic platform was Kubuntuu 12.04.
I am know trying with Ubuntu 12.04 which uses gcc-4.6 to see if it is really a gcc problem or the platform!
Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
From: Alex Perry<mailto:Alex.Perry_at_[hidden]>
Sent: Wednesday, October 18, 2017 4:45 PM
To: mahmood n<mailto:nt_mahmood_at_[hidden]>
Subject: RE: [Boost-users] Many undefined references for libboost_filesystem
Actually one other thought (though you may well have solved this by now).
Are you sure that the boost libraries you are attempting to link to are using the same abi?
Ie how were they built.
I only glanced at the github stuff you pointed too but I think I remember that the last commit was 5 years ago or some such â so probably wasnât using C++11.
I note you are using an old (54) version of boost whilst the current is (65) so about 5 years ago as well â but that probably supported being built with c++11.so you might need to rebuild them if they were using a different version of the C++ standard (or any abi breaking change such as 32 vs 64 bit, static runtime vs dynamically loaded etc).
Under windows boost normally encodes the abi into the library name and you just automagically (using a msvc extension) link to the appropriate one. That is not the normal way on linux since gcc doesnât have autolinking so you normally end up sticking them into a separate lib directory and swapping the -L path depending on which abi you want
Again though please note this is not boost specific â is just standard C / C++ / Fortran or any obj/link based language issues with building dependencies â (and why most have swapped to using cmake rather than vanilla make to avoid the pain).
A.
From: Alex Perry
Sent: 17 October 2017 16:14
To: 'mahmood n' <nt_mahmood_at_[hidden]<mailto:nt_mahmood_at_[hidden]>>
Subject: RE: [Boost-users] Many undefined references for libboost_filesystem
Dropped the rest of the boost list since Iâm sure not many are interested!
> I didnât want to have another pain for âfinding how the verbose variable is set in the Makefileâ!!!
Not hard that one⦠just add it to the command line when you call make
make verbose=1 â¦..
> The libraries do exist, so why on earth it can not link :(
> mahmood_at_vb:AES$ g++ -fPIC -L/home/mahmood/boost_1_54_0/stage/lib -lboost_filesystem -lboost_system -m64 -o /home/mahmood/gpgpu-sim_distribution/ispass2009-benchmarks/bin/release/AES obj/x86_64/release/aescuda.cpp.o obj/x86_64/release/aesCudaUtils.cpp.o obj/x86_64/release/aesHost.cu.o -L/usr/local/cuda/lib64 -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../lib -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../common/lib/linux -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../../shared//lib -lcudart -L/usr/local/cuda/lib64 -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../lib -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../common/lib/linux -L/home/mahmood/NVIDIA_GPU_Computing_SDK/C/src//../../shared//lib -lcudart -lcutil_x86_64 -lshrutil_x86_64
â¦.
Nope the computer is telling you they donât exist on those paths as given â unfortunately the computer is more likely to be correct than you on this!
You have a lot of library paths being set there â possibly you have multiple versions of boost libraries so its finding the wrong one first so you have a version conflict
Possibly the simplest way is create a noddy test and play with the command line till you work out what the problem is
http://rextester.com/live/JDVHT54458
That will give you similar compile errors without -lboost_filesystem -lboost_system added to the compile line.
Obviously that is using clang rather than gcc which you are using but the syntax and principles are pretty much the same between any c++ compiler
HTH
A.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net