首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟符号绑定失败:符号未找到:__ZN5boost11this_thread5hiden11sleep_untilERK8timespec (有...6hidden11sleep_untilERK8timespec)

延迟符号绑定失败:符号未找到:__ZN5boost11this_thread5hiden11sleep_untilERK8timespec (有...6hidden11sleep_untilERK8timespec)
EN

Stack Overflow用户
提问于 2017-06-04 10:04:11
回答 1查看 768关注 0票数 0

尝试使用OMPL1.1.0库。我使用的是这个示例代码(与问题无关,它发生在运行时):

代码语言:javascript
复制
#include <ompl/base/Goal.h>
#include <ompl/base/goals/GoalState.h>
#include <ompl/base/goals/GoalStates.h>
#include <ompl/base/ProjectionEvaluator.h>
#include <ompl/base/StateSpace.h>
#include <ompl/geometric/PathSimplifier.h>
#include <ompl/base/samplers/UniformValidStateSampler.h>

#include <ompl/base/spaces/RealVectorStateSpace.h>
#include <ompl/base/spaces/SE2StateSpace.h>
#include <ompl/base/spaces/SE3StateSpace.h>

#include <ompl/geometric/SimpleSetup.h>
#include <ompl/geometric/planners/rrt/RRT.h>

#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>

#include <iostream>

namespace ob = ompl::base;
namespace og = ompl::geometric;

bool isStateValid(const ob::State *state)
{
    return true;
}

int main(int /*argc*/, char ** /*argv*/)
{
    std::cout << "OMPL version: " << OMPL_VERSION << std::endl;
    boost::shared_ptr<ob::SE3StateSpace> space(boost::make_shared<ob::SE3StateSpace>());
    ob::RealVectorBounds bounds(3);
    bounds.setLow(-1);
    bounds.setHigh(1);
    space->setBounds(bounds);
    og::SimpleSetup ss(space);
    //ss.setStateValidityChecker([](const ob::State *state) { return isStateValid(state); });
    ob::ScopedState<> start(space);
    start.random();
    ob::ScopedState<> goal(space);
    goal.random();
    ss.setStartAndGoalStates(start, goal);
    ss.setup();
    ss.print();
    ob::PlannerStatus solved = ss.solve(1.0);
    if(solved)
    {
        std::cout << "Found solution:" << std::endl;
        ss.simplifySolution();
        ss.getSolutionPath().print(std::cout);
    }
    else
        std::cout << "No solution found" << std::endl;
    return 0;
}

以及以下makefile:

代码语言:javascript
复制
CXXFLAGS=-I/usr/local/Cellar/ompl/1.1.0/include -I/usr/local/Cellar/boost/1.64.0_1/include
LDLIBS=-lc++ -L/usr/local/Cellar/boost/1.64.0_1/lib/ -lboost_thread-mt -lboost_filesystem -lboost_system -lompl
ompltest: ompltest.o

当我运行时,我得到的可执行文件:

代码语言:javascript
复制
dyld: lazy symbol binding failed: Symbol not found: __ZN5boost11this_thread5hiden11sleep_untilERK8timespec
  Referenced from: /usr/local/opt/ompl/lib/libompl.11.dylib
  Expected in: /usr/local/opt/boost/lib/libboost_thread-mt.dylib

dyld: Symbol not found: __ZN5boost11this_thread5hiden11sleep_untilERK8timespec
  Referenced from: /usr/local/opt/ompl/lib/libompl.11.dylib
  Expected in: /usr/local/opt/boost/lib/libboost_thread-mt.dylib

Abort trap: 6

我在boost共享库中查找缺少的符号,并发现:

代码语言:javascript
复制
$ nm -gU /usr/local/opt/boost/lib/libboost_thread-mt.dylib | grep sleep_until.*timespec
0000000000004130 T __ZN5boost11this_thread21no_interruption_point6hidden11sleep_untilERK8timespec
0000000000004390 T __ZN5boost11this_thread6hidden11sleep_untilERK8timespec

这是__ZN5boost11this_thread6hidden11sleep_untilERK8timespec而不是__ZN5boost11this_thread5hiden11sleep_untilERK8timespec。那是什么?打错字?还是有意的?关键是,我不能使用这个库,我甚至没有自己构建(通过自制安装)。

编辑:未损坏的符号名称:

代码语言:javascript
复制
$ nm -jgU /usr/local/opt/boost/lib/libboost_thread-mt.dylib | grep sleep_until.*timespec | c++filt
boost::this_thread::no_interruption_point::hidden::sleep_until(timespec const&)
boost::this_thread::hidden::sleep_until(timespec const&)
$ echo __ZN5boost11this_thread5hiden11sleep_untilERK8timespec | c++filt
boost::this_thread::hiden::sleep_until(timespec const&)
EN

回答 1

Stack Overflow用户

发布于 2017-06-05 05:34:51

约翰·兹温克的建议

echo __ZN5boost11this_thread5hiden11sleep_untilERK8timespec |c++filt boost::this_thread::hiden::sleep_until(timespec const&) echo __ZN5boost11this_thread6hidden11sleep_untilERK8timespec |c++filt boost::this_thread::hidden::sleep_until(timespec const&),也许您的/usr/local/opt/ompl/lib/libompl.11.dylib是使用不同版本的boost库构建的,那么您当前的1.64呢?用于构建OMPL的boost库是什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44352898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档