[CMake] linking libraries at many levels

Michael Wild themiwi at gmail.com
Tue Aug 25 09:56:12 EDT 2009


On 25. Aug, 2009, at 15:51, Pol Monsó IRI wrote:

>>
>> DON'T EVER do something like this unless you really know what  
>> you're doing.
>> The proper way of doing this is to use the Debug configuration at
>> configure-time:
>>
>> cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-Wall /path/to/ 
>> source
>>
>
> Thanks for the tip! I had just put the warnings on to find out some  
> more
> about what could be going wrong
>
> This should be:
>>
>> TARGET_LINK_LIBRARIES( calClient
>> ${OPENCV_LIBRARIES}
>> callibs
>> )
>>
>
> I changed it, the make went without any appreciable effect. Here's hte
> output:
>
>
> pmonso at delucia:~/YARP/Calclient$ make VERBOSE=1
>> /usr/local/bin/cmake -H/home/pmonso/YARP/Calclient
>> -B/home/pmonso/YARP/Calclient --check-build-system CMakeFiles/ 
>> Makefile.cmake
>> 0
>> /usr/local/bin/cmake -E cmake_progress_start
>> /home/pmonso/YARP/Calclient/CMakeFiles
>> /home/pmonso/YARP/Calclient/CMakeFiles/progress.make
>> make -f CMakeFiles/Makefile2 all
>> make[1]: Entering directory `/home/pmonso/YARP/Calclient'
>> make -f lib/CMakeFiles/callibs.dir/build.make
>> lib/CMakeFiles/callibs.dir/depend
>> make[2]: Entering directory `/home/pmonso/YARP/Calclient'
>> cd /home/pmonso/YARP/Calclient && /usr/local/bin/cmake -E  
>> cmake_depends
>> "Unix Makefiles" /home/pmonso/YARP/Calclient /home/pmonso/YARP/ 
>> Calclient/lib
>> /home/pmonso/YARP/Calclient /home/pmonso/YARP/Calclient/lib
>> /home/pmonso/YARP/Calclient/lib/CMakeFiles/callibs.dir/ 
>> DependInfo.cmake
>> --color=
>> make[2]: Leaving directory `/home/pmonso/YARP/Calclient'
>> make -f lib/CMakeFiles/callibs.dir/build.make
>> lib/CMakeFiles/callibs.dir/build
>> make[2]: Entering directory `/home/pmonso/YARP/Calclient'
>> make[2]: Nothing to be done for `lib/CMakeFiles/callibs.dir/build'.
>> make[2]: Leaving directory `/home/pmonso/YARP/Calclient'
>> /usr/local/bin/cmake -E cmake_progress_report
>> /home/pmonso/YARP/Calclient/CMakeFiles  3 4 5
>> [ 60%] Built target callibs
>> make -f CMakeFiles/calClient.dir/build.make CMakeFiles/ 
>> calClient.dir/depend
>> make[2]: Entering directory `/home/pmonso/YARP/Calclient'
>> cd /home/pmonso/YARP/Calclient && /usr/local/bin/cmake -E  
>> cmake_depends
>> "Unix Makefiles" /home/pmonso/YARP/Calclient /home/pmonso/YARP/ 
>> Calclient
>> /home/pmonso/YARP/Calclient /home/pmonso/YARP/Calclient
>> /home/pmonso/YARP/Calclient/CMakeFiles/calClient.dir/DependInfo.cmake
>> --color=
>> make[2]: Leaving directory `/home/pmonso/YARP/Calclient'
>> make -f CMakeFiles/calClient.dir/build.make CMakeFiles/ 
>> calClient.dir/build
>> make[2]: Entering directory `/home/pmonso/YARP/Calclient'
>> Linking CXX executable calClient
>> /usr/local/bin/cmake -E cmake_link_script CMakeFiles/calClient.dir/ 
>> link.txt
>> --verbose=1
>> /usr/bin/c++   -g -Wall  -fPIC CMakeFiles/calClient.dir/ 
>> calClient.cpp.o
>> CMakeFiles/calClient.dir/chaser.cpp.o  -o calClient -rdynamic -Llib
>> /home/pmonso/YARP/yarp-2.2.2/lib/libYARP_dev.a
>> /home/pmonso/YARP/yarp-2.2.2/lib/libYARP_sig.a
>> /home/pmonso/YARP/yarp-2.2.2/lib/libYARP_OS.a -lACE -lcv -lcvaux - 
>> lcxcore
>> -lhighgui lib/libcallibs.a /home/pmonso/YARP/yarp-2.2.2/lib/ 
>> libYARP_dev.a
>> /home/pmonso/YARP/yarp-2.2.2/lib/libYARP_sig.a
>> /home/pmonso/YARP/yarp-2.2.2/lib/libYARP_OS.a -lACE -Wl,-rpath,lib
>> CMakeFiles/calClient.dir/calClient.cpp.o: In function
>> `incrementalCalibrate(yarp::dev::IPositionControl*,  
>> yarp::dev::IEncoders*)':
>> /home/pmonso/YARP/Calclient/calClient.cpp:276: undefined reference to
>> `print_double_array(double const*, int)'
>> /home/pmonso/YARP/Calclient/calClient.cpp:277: undefined reference to
>> `print_double_array(double const*, int)'
>> /home/pmonso/YARP/Calclient/calClient.cpp:295: undefined reference to
>> `print_double_array(double const*, int)'
>> CMakeFiles/calClient.dir/calClient.cpp.o: In function
>> `calibrate(yarp::dev::IPositionControl*, yarp::dev::IEncoders*)':
>> /home/pmonso/YARP/Calclient/calClient.cpp:155: undefined reference to
>> `print_double_array(double const*, int)'
>> CMakeFiles/calClient.dir/calClient.cpp.o: In function
>> `randomCalibrate(yarp::dev::IPositionControl*,  
>> yarp::dev::IEncoders*)':
>> /home/pmonso/YARP/Calclient/calClient.cpp:207: undefined reference to
>> `print_double_array(double const*, int)'
>> CMakeFiles/calClient.dir/calClient.cpp.o:/home/pmonso/YARP/ 
>> Calclient/calClient.cpp:208:
>> more undefined references to `print_double_array(double const*,  
>> int)' follow
>> collect2: ld returned 1 exit status
>> make[2]: *** [calClient] Error 1
>> make[2]: Leaving directory `/home/pmonso/YARP/Calclient'
>> make[1]: *** [CMakeFiles/calClient.dir/all] Error 2
>> make[1]: Leaving directory `/home/pmonso/YARP/Calclient'
>> make: *** [all] Error 2
>> pmonso at delucia:~/YARP/Calclient$
>>
>
> Thank you very much for the quick response!
>
> pol

As you can see, lib/libcallibs.a is in the link-command, so it must be  
something else. What does

nm lib/libcallibs.a | grep print_double_array

tell you?

Michael


More information about the CMake mailing list