Я пытаюсь добавить код для Ethernet-модуля ввода-вывода MOXA с ROS. Я использую пример кода, чтобы убедиться, что он работает. Я скомпилировал код с помощью gcc и знаю, что код работает. Я скомпилировал его из терминала с помощью этой строки:
g++ -L/usr/lib/x86_64-linux-gnu -pthread main.cpp -Wall -O3 -omain_test -L/usr/local/lib -lmxio_x64
Я получаю файл main_test.out и это работает.
Итак, я создал рабочее пространство catkin и новый пакет, следуя руководству по ROS. Я добавляю свой код в папку src, редактирую CMakeList и package.xml. Затем, когда я пытаюсь запустить catkin_make -Wall (чтобы избавиться от большого количества предупреждений), я получаю следующее сообщение:
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/johau/ros_ws/devel
-- Using CMAKE_PREFIX_PATH: /home/johau/ros_ws/devel;/opt/ros/indigo
-- This workspace overlays: /home/johau/ros_ws/devel;/opt/ros/indigo
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/johau/ros_ws/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.6.9
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - master
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'master'
-- ==> add_subdirectory(master)
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- thread
-- Configuring done
-- Generating done
-- Build files have been written to: /home/johau/ros_ws/build
####
#### Running command: "make -Wall -j8 -l8" in "/home/johau/ros_ws/build"
####
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
Invoking "make" failed
Я также получил «неопределенную ссылку на 'phread_create'» при компиляции с помощью gcc и решил эту проблему, вызвав -pthread перед main.cpp.
Итак, моя проблема теперь в том, как мне сделать то же самое с CMake?
Я много искал и пробовал разные решения, но пока ничего не помогло. Я довольно новичок в вопросах ROS и CMake, поэтому не уверен, что и куда добавить, или я где-то написал что-то не так в моем CMakeLists.txt или package.xml.
Я использую Ubuntu 14.04 LTS и ROS Indigo.
Если вам нужна дополнительная информация, дайте мне знать.
Заранее спасибо.
[EDIT 1]
Я попробовал добавить
set(CMAKE_CXX_FLAGS "-lpthread")
После проекта (главного) в CMakeLists.txt.
I также пробовал:
set(CMAKE_CXX_FLAGS "-L/usr/lib/x86_64-linux-gnu -pthread")
и
set(CMAKE_CXX_FLAGS "-L/usr/lib/x86_64-linux-gnu")
set(CMAKE_CXX_FLAGS "-pthread")
Но выдал то же сообщение об ошибке.
Мой CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(master)
unset(MOXA_LIBRARY CACHE)
find_library(
MOXA_LIBRARY
NAMES mxio_x64
PATHS /usr/local/lib
PATH_SUFFIXES lib
NO_DEFAULT_PATH
)
if(MOXA_LIBRARY STREQUAL "MOXA_LIBRARY-NOTFOUND")
message(WARNING "Moxa Library not present !")
else()
add_definitions(-DUSE_MOXA)
endif()
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS thread)
###################################
## catkin specific configuration ##
###################################
catkin_package(
CATKIN_DEPENDS roscpp std_msgs
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(
${catkin_INCLUDE_DIRS}
/usr/lib/x86_64-linux-gnu/
)
## Declare a cpp executable
add_executable(main
src/main.cpp)
## Specify libraries to link a library or executable target against
target_link_libraries(main
${MOXA_LIBRARY}
${catkin_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
Мой package.xml:
master
0.0.0
The master package
johau
BSD
catkin
roscpp
std_msgs
roscpp
std_msgs
[EDIT 2]
После запроса от @Lu-Niu я запустил catkin_make VERBOSE=1 (catkin_make должен быть таким же, как make насколько я знаю, часть серёжки предназначена только потому, что она находится в ROS), а выходные данные находятся в поле ниже. Насколько я вижу, указан и -pthread, хотя я думаю, что он должен быть -lpthread, когда каталог не указан первым (поправьте меня, если я ошибаюсь). Так что же мне следует отредактировать, чтобы изменить порядок команды?
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ -lpthread CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
[EDIT 3]
Оба предложения @fenix688 дают такой результат (с VERBOSE=1):
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lpthread -lboost_thread -lpthread -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
Хотя, если я удалю все с pthread из CMakeLists.txt, я получу этот вывод VERBOSE=1, где -lpthread все еще установлен.
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
[EDIT 4]
Попробовал использовать файл CMakeLists.txt @fenix688, и он выдал ту же ошибку с этим выводом:
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lpthread -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
Подробнее здесь: https://stackoverflow.com/questions/278 ... -and-cmake
Связывание библиотеки корректно с помощью ROS и cmake. ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1736014075
Anonymous
Я пытаюсь добавить код для Ethernet-модуля ввода-вывода MOXA с ROS. Я использую пример кода, чтобы убедиться, что он работает. Я скомпилировал код с помощью gcc и знаю, что код работает. Я скомпилировал его из терминала с помощью этой строки:
g++ -L/usr/lib/x86_64-linux-gnu -pthread main.cpp -Wall -O3 -omain_test -L/usr/local/lib -lmxio_x64
Я получаю файл main_test.out и это работает.
Итак, я создал рабочее пространство catkin и новый пакет, следуя руководству по ROS. Я добавляю свой код в папку src, редактирую CMakeList и package.xml. Затем, когда я пытаюсь запустить catkin_make -Wall (чтобы избавиться от большого количества предупреждений), я получаю следующее сообщение:
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/johau/ros_ws/devel
-- Using CMAKE_PREFIX_PATH: /home/johau/ros_ws/devel;/opt/ros/indigo
-- This workspace overlays: /home/johau/ros_ws/devel;/opt/ros/indigo
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/johau/ros_ws/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.6.9
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - master
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'master'
-- ==> add_subdirectory(master)
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- thread
-- Configuring done
-- Generating done
-- Build files have been written to: /home/johau/ros_ws/build
####
#### Running command: "make -Wall -j8 -l8" in "/home/johau/ros_ws/build"
####
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
Invoking "make" failed
Я также получил «неопределенную ссылку на 'phread_create'» при компиляции с помощью gcc и решил эту проблему, вызвав -pthread перед main.cpp.
Итак, моя проблема теперь в том, как мне сделать то же самое с CMake?
Я много искал и пробовал разные решения, но пока ничего не помогло. Я довольно новичок в вопросах ROS и CMake, поэтому не уверен, что и куда добавить, или я где-то написал что-то не так в моем CMakeLists.txt или package.xml.
Я использую Ubuntu 14.04 LTS и ROS Indigo.
Если вам нужна дополнительная информация, дайте мне знать.
Заранее спасибо.
[EDIT 1]
Я попробовал добавить
set(CMAKE_CXX_FLAGS "-lpthread")
После проекта (главного) в CMakeLists.txt.
I также пробовал:
set(CMAKE_CXX_FLAGS "-L/usr/lib/x86_64-linux-gnu -pthread")
и
set(CMAKE_CXX_FLAGS "-L/usr/lib/x86_64-linux-gnu")
set(CMAKE_CXX_FLAGS "-pthread")
Но выдал то же сообщение об ошибке.
Мой CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(master)
unset(MOXA_LIBRARY CACHE)
find_library(
MOXA_LIBRARY
NAMES mxio_x64
PATHS /usr/local/lib
PATH_SUFFIXES lib
NO_DEFAULT_PATH
)
if(MOXA_LIBRARY STREQUAL "MOXA_LIBRARY-NOTFOUND")
message(WARNING "Moxa Library not present !")
else()
add_definitions(-DUSE_MOXA)
endif()
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS thread)
###################################
## catkin specific configuration ##
###################################
catkin_package(
CATKIN_DEPENDS roscpp std_msgs
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(
${catkin_INCLUDE_DIRS}
/usr/lib/x86_64-linux-gnu/
)
## Declare a cpp executable
add_executable(main
src/main.cpp)
## Specify libraries to link a library or executable target against
target_link_libraries(main
${MOXA_LIBRARY}
${catkin_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
Мой package.xml:
master
0.0.0
The master package
johau
BSD
catkin
roscpp
std_msgs
roscpp
std_msgs
[EDIT 2]
После запроса от @Lu-Niu я запустил catkin_make VERBOSE=1 (catkin_make должен быть таким же, как make насколько я знаю, часть серёжки предназначена только потому, что она находится в ROS), а выходные данные находятся в поле ниже. Насколько я вижу, указан и -pthread, хотя я думаю, что он должен быть -lpthread, когда каталог не указан первым (поправьте меня, если я ошибаюсь). Так что же мне следует отредактировать, чтобы изменить порядок команды?
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ -lpthread CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
[EDIT 3]
Оба предложения @fenix688 дают такой результат (с VERBOSE=1):
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lpthread -lboost_thread -lpthread -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
Хотя, если я удалю все с pthread из CMakeLists.txt, я получу этот вывод VERBOSE=1, где -lpthread все еще установлен.
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
[EDIT 4]
Попробовал использовать файл CMakeLists.txt @fenix688, и он выдал ту же ошибку с этим выводом:
Base path: /home/johau/ros_ws
Source space: /home/johau/ros_ws/src
Build space: /home/johau/ros_ws/build
Devel space: /home/johau/ros_ws/devel
Install space: /home/johau/ros_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/johau/ros_ws/build"
####
####
#### Running command: "make VERBOSE=1 -j8 -l8" in "/home/johau/ros_ws/build"
####
/usr/bin/cmake -H/home/johau/ros_ws/src -B/home/johau/ros_ws/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/johau/ros_ws/build/CMakeFiles /home/johau/ros_ws/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/depend
make[2]: Entering directory `/home/johau/ros_ws/build'
cd /home/johau/ros_ws/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/johau/ros_ws/src /home/johau/ros_ws/src/master /home/johau/ros_ws/build /home/johau/ros_ws/build/master /home/johau/ros_ws/build/master/CMakeFiles/main.dir/DependInfo.cmake --color=
make[2]: Leaving directory `/home/johau/ros_ws/build'
make -f master/CMakeFiles/main.dir/build.make master/CMakeFiles/main.dir/build
make[2]: Entering directory `/home/johau/ros_ws/build'
Linking CXX executable /home/johau/ros_ws/devel/lib/master/main
cd /home/johau/ros_ws/build/master && /usr/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/main.dir/src/main.cpp.o -o /home/johau/ros_ws/devel/lib/master/main -L/usr/local/lib -rdynamic -lpthread -lmxio_x64 /opt/ros/indigo/lib/libroscpp.so -lboost_signals -lboost_filesystem /opt/ros/indigo/lib/librosconsole.so /opt/ros/indigo/lib/librosconsole_log4cxx.so /opt/ros/indigo/lib/librosconsole_backend_interface.so -llog4cxx -lboost_regex /opt/ros/indigo/lib/libxmlrpcpp.so /opt/ros/indigo/lib/libroscpp_serialization.so /opt/ros/indigo/lib/librostime.so -lboost_date_time /opt/ros/indigo/lib/libcpp_common.so -lboost_system -lboost_thread -lpthread -lconsole_bridge -lboost_thread -lpthread -lconsole_bridge -Wl,-rpath,/usr/local/lib:/opt/ros/indigo/lib
CMakeFiles/main.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0xdd0): warning: the `gets' function is dangerous and should not be used.
/usr/local/lib/libmxio_x64.so: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/johau/ros_ws/devel/lib/master/main] Error 1
make[2]: Leaving directory `/home/johau/ros_ws/build'
make[1]: *** [master/CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/home/johau/ros_ws/build'
make: *** [all] Error 2
Invoking "make" failed
Подробнее здесь: [url]https://stackoverflow.com/questions/27842373/link-library-correct-with-ros-and-cmake[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия