Я работаю над пакетом knowrob и уже написал свою онтологию (файл XML) с помощью Protege. Если я разберу файл 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()
. Кроме того, в этой библиотеке, кажется, есть собственный макрос Cmakecatkin_package()
, и написано, что его нужно вызывать перед передачей какой-либо информации в сборку. Вы звонили? - person Baris Demiray   schedule 22.05.2015message(STATUS ${catkin_LIBRARIES})
в файле CMakeLists.txt. - person Baris Demiray   schedule 22.05.2015CMakeListst.txt
, желательно прямо перед вызовомtarget_link_libraries()
, тогда, когда вы сделаетеcmake .
, он будет работать с другими командами Cmake. - person Baris Demiray   schedule 22.05.2015message(STATUS ${catkin_LIBRARIES})
перед вызовомtarget_link_libraries()
и перезапустить Cmake? - person Baris Demiray   schedule 22.05.2015