首页 > 解决方案 > 通过 cmake 链接 libmodbus

问题描述

这就是我所拥有的CMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)

# set the project name and version
project(ReadEncoder VERSION 1.0)

# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_compile_options(-Wall -Wextra -Wpedantic)

#However, the file(GLOB...) allows for wildcard additions:
file(GLOB SOURCES "src/*.c")

#For the shared library:
find_path(Modbus_INCLUDE_DIR modbus/modbus.h
   HINTS
   /opt/libmodbus/include/
   )
find_library(Modbus_LIBRARIES NAMES modbus
   HINTS
   /opt/libmodbus/lib/
   )
include_directories(
   ${Modbus_INCLUDE_DIR}/modbus
   )

# add the executable
add_executable(ReadEncoder ${SOURCES})

我这样做:

cmake .
make

但我得到:

[100%] Linking C executable ReadEncoder
CMakeFiles/ReadEncoder.dir/src/ReadEncoder.c.o: In function `main':
ReadEncoder.c:(.text+0x35): undefined reference to `modbus_new_tcp'
ReadEncoder.c:(.text+0x45): undefined reference to `modbus_connect'
ReadEncoder.c:(.text+0x58): undefined reference to `modbus_strerror'
ReadEncoder.c:(.text+0x85): undefined reference to `modbus_free'
ReadEncoder.c:(.text+0xa5): undefined reference to `modbus_read_registers'
ReadEncoder.c:(.text+0xbc): undefined reference to `modbus_strerror'
ReadEncoder.c:(.text+0x13c): undefined reference to `modbus_close'
ReadEncoder.c:(.text+0x148): undefined reference to `modbus_free'

这里有什么问题?Libmodbus 安装在我指向 cmake 的位置,我检查了。我是新手,所以也许它是非常基本的东西。

标签: gcccmakecompilationlibmodbus

解决方案


推荐阅读