BuildFailed错误:无法使用qibuild构建C ++ SDK Helloworld

时间:2018-10-08 08:17:29

标签: c++ linux build cross-compiling nao-robot

我正在尝试在Linux 18.04.1(VirtualBox)上安装NaoQI C ++ SDK。我遵循了以下安装说明:http://doc.aldebaran.com/2-1/dev/cpp/install_guide.html

我的问题出在E部分Step.3中,当我尝试运行“ qibuild make”时

在尝试构建helloworld示例时出现此错误:

  

CMakeFiles / testhelloworld.dir / testhelloworld.cpp.o:在函数中   main': /home/nounou/Documents/SDKfolder/naoqi-sdk/doc/dev/cpp/examples/core/helloworld/testhelloworld.cpp:35: undefined reference to AL :: ALBroker :: createBroker(std :: __ cxx11 :: basic_string,std :: allocator> const&,   std :: __ cxx11 :: basic_string,   std :: allocator> const&,int,std :: __ cxx11 :: basic_string,std :: allocator> const&,int,int,   std :: __ cxx11 :: basic_string,   std :: allocator>,bool)'   /home/nounou/Documents/SDKfolder/naoqi-sdk/doc/dev/cpp/examples/core/helloworld/testhelloworld.cpp:38:   未定义的引用   AL::ALProxy::ALProxy(boost::shared_ptr<AL::ALBroker>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int)' CMakeFiles/testhelloworld.dir/testhelloworld.cpp.o: In function qi :: log :: LogStream ::〜LogStream()':

....

  

CMakeFiles / testhelloworld.dir / build.make:113:目标配方   'sdk / bin / testhelloworld'失败[2]: * [sdk / bin / testhelloworld]   错误1 CMakeFiles / Makefile2:67:目标配方   'CMakeFiles / testhelloworld.dir / all'失败make [1]:*   [CMakeFiles / testhelloworld.dir / all]错误2 Makefile:129:配方   目标“全部”失败:*** [全部]错误2

     

[错误]:构建项目Hello World时发生BuildFailed错误

如果您对问题有任何了解,请帮助我。谢谢!

2 个答案:

答案 0 :(得分:0)

由于过渡到C ++ 11,因此很可能您遇到了ABI不兼容的问题。您正在使用Ubuntu 18.04,该编译器已配置为与现代C ++库链接,但是该工具链是使用以前的ABI编译的,并且不执行编译器标志来确保兼容性。

要解决此问题,请执行以下任一操作:

  • 设置编译器标志以确保您未链接到C ++ 11库(如果有人知道它们,请共享)。
  • 通过使用跨工具链而不是Linux工具链为机器人而不是机器进行编译。
  • 按照安装指南中的说明使用Ubuntu 12.04。

顺便说一句,在C ++安装指南的E.4小节中,它说要编译core/sayhelloworld下的示例。在这里,您在core/helloworld下编译了示例。

答案 1 :(得分:0)

我在Fedora 29上遇到了同样的问题...经过几个小时的搜索,我发现将set(CMAKE_CXX_FLAGS“ -D_GLIBCXX_USE_CXX11_ABI = 0”)添加到CMakeLists.txt文件中可以解决此问题。

我在这里找到了解决方案: gcc using c++11 standard even though 98 explicitly specified