最近在工控机上加入CAN卡,想利用CAN卡来做为数据收发。现在在工程中加入CAN卡的头文件和自己做的cpp文档。已经申明了
函数,但是还是会出现上图所示的错误,经过一晚上的战斗算是搞清楚了。感谢@头发还没秃的帮助哈。
问题原因:没有添加第三方依赖库。
解决方案:
在ROS下使用第三方库的话可以直接修改pkg所对应的CMakeLists.txt。
添加头文件搜索路径: 在include_directories()添加所需要的头文件目录, 相当于编译过程中的 -I命令。
添加库文件搜索路径: 在link_directories()里添加所需要的库的目录,相当于编译过程中的 -L命令。
添加对库的链接:在target_link_libraries()里面添加需要添加的库的名称,相当于编译过程中的-l命令。
原库中的make编译文件。
CROSS_COMPILE =
.PHONY : clean
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CROSS_COMPILE)g++ -fPIC
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)OBJDUMP
RANLIB = $(CROSS_COMPILE)ranlib
CFLAGS = -I /usr/local/include/libCanCmd/
LDFLAGS = -L /usr/lib/ -lCanCmd
OBJS =
all: clean testLikeCan
testLikeCan:
$(CPP) -g -o testLikeCan testLikeCan.c -lpthread -lCanCmd
%.o: %.c
$(CPP) $(CFLAGS) -g -fPIC -c $< -o $@
clean :
rm -fr *.o libCanCmd.so testLikeCan
install:
cp dll/libCanCmd.so /usr/lib/
ldconfig
uninstall:
rm -f /usr/lib/libCanCmd.so
其中:CFLAGS = -I /usr/local/include/libCanCmd/
LDFLAGS = -L /usr/lib/ -lCanCmd
根据原有库的make文档写出的cmake.txt文档。
include_directories(
include ${catkin_INCLUDE_DIRS}
/usr/local/include/libCanCmd/
# include
# ${catkin_INCLUDE_DIRS}
)
link_directories(
${catkin_LIB_DIRS}
/usr/lib/
)
add_executable(auto_run
include/canopen/lowerpc.h
include/canopen/socketcon.h
include/canopen/scanner.h
include/canopen/type.h
include/canopen/ICANCmd.h
src/auto_run.cpp
src/socketcon.cpp
src/scanner.cpp
src/minipcie_can.cpp
# src/lowerpc.cpp
)
add_dependencies(auto_run ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(auto_run
${catkin_LIBRARIES}
CanCmd
)
修改完成。 经过编译后成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)