And now it’s time for YARP!
First fetch ACE from the official website and read the ACE_INSTALL.html inside the .tar.gz. Oh, it’s a lengthy and not-so-easy one. Step by step:
tar -xzf ACE-6.4.0.tar.gz export ACE_ROOT=$PWD/ACE_wrappers echo $ACE_ROOT cd ACE_wrappers/ echo "#include <ace/config-linux.h>" > ace/config.h echo "include $ACE_ROOT/include/makeinclude/platform_linux.GNU" > include/makeinclude/platform_macros.GNU echo "INSTALL_PREFIX=/usr/local" >> include/makeinclude/platform_macros.GNU export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH make make install
Be sure to have GSL:
sbopkg -i gsl
Time for a YARP compile, they suggest on http://www.yarp.it/install_yarp_linux.html to have a couple options enabled in a ccmake GUI… who has time for clicking in GUIs?
git clone https://github.com/robotology/yarp.git cd yarp mkdir build && cd build cmake -DCREATE_GUIS=on -DCREATE_LIB_MATH=on ../ make -j4
Oh, errors?
[ 58%] Linking CXX executable ../../../bin/yarpidl_rosmsg /usr/lib64/libreadline.so.6: undefined reference to `tgetnum' /usr/lib64/libreadline.so.6: undefined reference to `tgetent' /usr/lib64/libreadline.so.6: undefined reference to `tgetstr' /usr/lib64/libreadline.so.6: undefined reference to `tgoto' /usr/lib64/libreadline.so.6: undefined reference to `UP' /usr/lib64/libreadline.so.6: undefined reference to `BC' /usr/lib64/libreadline.so.6: undefined reference to `tputs' /usr/lib64/libreadline.so.6: undefined reference to `PC' /usr/lib64/libreadline.so.6: undefined reference to `tgetflag' collect2: error: ld returned 1 exit status src/idls/rosmsg/CMakeFiles/yarpidl_rosmsg.dir/build.make:175: recipe for target 'bin/yarpidl_rosmsg' failed make[2]: *** [bin/yarpidl_rosmsg] Error 1
… what the? That’s not a thing I’m used to see around here. No tgetnum? In readline?
First things first – is it really readline to blame? Is he the one supplying tgetnum?
nm -AD /usr/lib64/lib*.so 2>/dev/null | grep ' tgetnum'
Nope. So I need termcap+ncurses to be linked with -ltermcap -lncurses, but how to do this in an elegant way … screw the elegant way, how to do this in a BULLETPROOF way?
ACE! He is linked literally everywhere! Let me dive into FindACE.cmake, it’s nice to add this around line 120:
list(APPEND ACE_LIBRARIES ncurses termcap)
Done, compiles nicely. But does it work?
bash-4.3$ yarpserver __ __ ___ ____ ____ \ \/ // || _ \ | _ \ \ // /| || |/ / | |/ / / // ___ || _ \ | _/ /_//_/ |_||_| \_\|_| ======================== Call with --help for information on available options Using port database: :memory: Using subscription database: :memory: IP address: default Port number: 10000 yarp: Port /root active at tcp://192.168.0.13:10000 Registering name server with itself: * register "/root" tcp "192.168.0.13" 10000 + set "/root" ips "127.0.0.1" "192.168.0.13" + set "/root" process 19726 * register fallback mcast "224.2.1.1" 10000 + set fallback ips "127.0.0.1" "192.168.0.13" + set fallback process 19726 Name server can be browsed at http://192.168.0.13:10000/ Ok. Ready!
Yeap.