[CMake] ExternalProject_Add and inheritance

Cedric Doucet cedric.doucet at inria.fr
Fri Dec 11 04:05:35 EST 2015


Hello Marc, 

thank you very much for your answer! 

I am not sure to understand how to overcome my problem with these variables. 
I can explain my problem further. 

I have a toy example of the problem which contains: 
- a call to ExternalProject_Add to install boost and yaml-ccp (the latter depends on the former) 
- a main function which loads a file with yaml-cpp (just one line of code) 

Everything compiles with GCC 5 and I obtain an executable file (called gcc_example). 
However, when I run this executable file, I get the following error message : 

./gcc_example: relocation error: ./gcc_example: symbol _ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference 

And I can overcome this problem by setting LD_LIBRARY_PATH to the right value: 

LD_LIBRARY_PATH=/home/libraries/gcc/5.2.0/lib64/ ./gcc_example 

The origin of the problem is that the definition of strings is different since GCC 5. 
Unfortunately, the default behavior is to call the C++ standard library of my Ubuntu system, and the version of this library is older than the version of GCC 5. 

I can check it with 'ldd ./gcc_example': 

linux-vdso.so.1 => (0x00007ffd02ef7000) 
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x0000003a71400000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x0000003d03a00000) 
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x0000003a71000000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000003d02e00000) 
/lib64/ld-linux-x86-64.so.2 (0x0000003d02a00000) 

But I don't understand why I have still this problem since I put these lines in my CMakeLists file (of course the right value of GCC_ROOT is passed to the cmake command at configuration step): 

link_directories(${GCC_ROOT}/lib64) 
target_link_libraries(gcc_example ${GCC_ROOT}/lib64/libstdc++.so) 

I can provide my simple toy example if it helps to understand. 
You just need to compile it with GCC 5 to see the problem (with older versions of GCC, everything works fine because strings are defined in the "classical" way). 

Best, 

Cédric 

----- Mail original -----

> De: "Marc CHEVRIER" <marc.chevrier at sap.com>
> À: "Cedric Doucet" <cedric.doucet at inria.fr>, cmake at cmake.org
> Envoyé: Vendredi 11 Décembre 2015 08:44:38
> Objet: Re: [CMake] ExternalProject_Add and inheritance

> With CMake, you can control compilation and link flags with the following
> environment variables:

> * CC: specify C compiler
> * CFLAGS: C compiler flags
> * CXX: specify C++ compiler
> * CXXFLAGS: C++ compiler flags
> * LDFLAGS: linker flags

> And to finish you can overload make command for generation using
> CMAKE_COMMAND option of ExternalProject_Add:
> CMAKE_CMMAND “${CMAKE_COMMAND}” -E env CXX=${CMAKE_CXX_COMPILER} LDFLAGS=“…”
> “${CMAKE_COMMAND}”

> From: CMake < cmake-bounces at cmake.org > on behalf of Cedric Doucet <
> cedric.doucet at inria.fr >
> Date: Thursday 10 December 2015 at 18:21
> To: " cmake at cmake.org " < cmake at cmake.org >
> Subject: [CMake] ExternalProject_Add and inheritance

> Hello,

> I use the ExternalProject_Add command to manage third-party libraries.
> In the same time, I need to overcome some compatibility problems between GCC
> 4 and GCC 5 (strings are not defined in the same way in the STL).
> The solution I use is the one given here:
> http://stackoverflow.com/questions/33500337/how-to-handle-dual-abi-in-gcc-5
> It allows me to force to use the libstdc++.so given by the GCC repository
> given to the cmake command.

> The problem is that trick does not work with the ExternalProject_Add command
> because configuration steps of third-party libraries are autonomous.
> Do you know how to solve the problem?

> For example, if I use the ExternalProject_Add command to manage a
> third-library whose configuration also depends on a cmake script, how could
> I tell this script to use the compilers and the libstdc++.so I provided to
> my own cmake script?

> Best,

> Cédric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20151211/f22a932b/attachment-0001.html>


More information about the CMake mailing list