【发布时间】:2015-05-22 08:18:50
【问题描述】:
我正在开发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)'
以及关于未定义引用的其他类似错误。
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})
我该如何解决?
【问题讨论】:
-
我会先打印
catkin_LIBRARIES的值来检查find_package()是否成功。此外,这个库似乎有一个自定义的 Cmake 宏catkin_package()并且它写道必须在将任何信息传递给构建之前调用它。你打电话了吗? -
不,我认为不。所以首先:我如何检查 catkin_LIBRARIES 来打印结果?附言抱歉,我是新的 ubuntu 用户 :)
-
您可以通过在您的 CMakeLists.txt 文件中调用
message(STATUS ${catkin_LIBRARIES})来打印它 -
也许我做错了;在我拥有 CMakeList.txt 的文件夹中的终端中?在这种情况下:bash: syntax error near unexpected token `STATUS'
-
啊,不,它应该进入你的
CMakeListst.txt文件,最好在target_link_libraries()调用之前,然后当你调用cmake .时,它将与其他Cmake 命令一起运行。