c++ - 编译 cpp 文件时出错 (ros)

标签 c++ json cmake ros

我正在研究 knowrob 包,我已经用 Protege 编写了我的本体(XML 文件)。 如果我解析 owl.file 并发送一些查询,我就会得到正确的答案。 现在我的问题是制作一个 cpp 来解析我的 xml 文件。 我已经阅读了一些关于 json_prolog 的内容,可以将我的程序的查询发送到 knowrob,但是太困惑了(http://www.knowrob.org/doc/interact_with_knowrob_via_ros)。 我创建了我的启动文件并且它可以工作,稍后当我尝试编译这个 cpp 文件时:

#include <string>
#include <ros/ros.h>
#include <json_prolog/prolog.h>
using namespace std;
using namespace json_prolog;
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "test_json_prolog");
    Prolog pl;
    PrologQueryProxy bdgs = pl.query("member(A, [1, 2, 3, 4]), B = ['x', A],             C = foo(bar, A, B)");

    for(PrologQueryProxy::iterator it=bdgs.begin();

    it != bdgs.end(); it++)
    {
        PrologBindings bdg = *it;
        cout << "Found solution: " << (bool)(it == bdgs.end()) << endl;
        cout << "A = "<< bdg["A"] << endl;
        cout << "B = " << bdg["B"] << endl;
        cout << "C = " << bdg["C"] << endl;
    }
    return 0;
}code here

我有错误:

/tmp/cccLQk3H.o:test_json_prolog.cpp:function main: error: undefined reference to 'ros::init(int&, char**, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'

以及关于 undefined reference 的其他类似错误。

CMakelist:

cmake_minimum_required(VERSION 2.8.3)
project(json_prolog)
find_package(catkin REQUIRED rosjava_build_tools roscpp rospy json_prolog_msgs)
catkin_rosjava_setup(installApp publishMavenJavaPublicationToMavenRepository writeClasspath)
install(DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}/org/knowrob/${PROJECT_NAME}/
    DESTINATION ${CATKIN_GLOBAL_MAVEN_DESTINATION}/org/knowrob/${PROJECT_NAME})
catkin_package(INCLUDE_DIRS include LIBRARIES json_prolog CATKIN_DEPENDS json_prolog_msgs )


# find SWI Prolog libraries
include(FindPkgConfig)
pkg_check_modules(SWIPL REQUIRED swipl)
include_directories(${SWIPL_INCLUDE_DIRS})
link_directories(${SWIPL_LIBRARY_DIRS})

# export Python libraries
catkin_python_setup()

# C++ client library

include_directories(include ${catkin_INCLUDE_DIRS})
find_package(PkgConfig)
pkg_check_modules(JSON_GLIB REQUIRED json-glib-1.0)
add_definitions(${JSON_GLIB_CFLAGS})
link_directories(${JSON_GLIB_LIBRARIY_DIRS})

我该如何解决?

最佳答案

您应该开始调查,检查您对 find_package() 的调用(您调用了 find_package(),对吧?)是否成功,因此更改您在通过添加调试行来回答你的问题,

message(STATUS ${catkin_LIBRARIES})

add_executable(test_json_prolog examples/test_json_prolog.cpp)
target_link_libraries(test_json_prolog json_prolog ${catkin_LIBRARIES})
add_dependencies(test_json_prolog ${catkin_EXPORTED_TARGETS})

调用 message 应该是打印你打算链接到的库。

此外,如果您还没有看到这个页面,http://wiki.ros.org/catkin/CMakeLists.txt .他们在那里提到了一个您必须调用的自定义宏,即 catkin_package()。我猜第 6、7 和 8 节也都与您的问题有关。

关于c++ - 编译 cpp 文件时出错 (ros),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391688/

相关文章:

使用递归的 C++ vector 元素求和

ruby-on-rails - 使用 native 扩展构建二进制文件 - Ruby/Rails

c++ - 将链表传递给函数并确保它未被修改

python - 如何使用 SIP 制作两个或多个 C++/Qt 类的 python 模块?

python - 使用 Python 将 Excel 转换为 JSON

json - 响应 JSON 对象还是 JSON.stringify?

json - 如何将复杂的 JSON 字符串放入 SQL Server 列中

cmake - 如何编译 wfreerdp.dll 而不是 wfreerdp.exe?

cmake - 针对 GTest 的链接失败

c++ - c++ 类的意外输出