详细解决方案:

1. 临时解决方案(推荐测试用)

通过设置LD_LIBRARY_PATH环境变量临时添加库路径:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./test_modbus

2. 永久解决方案(系统级生效)

将库路径添加到/etc/ld.so.conf并更新缓存:

# 1. 创建或编辑配置文件
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/libmodbus.conf'

# 2. 更新动态链接器缓存
sudo ldconfig

# 3. 验证是否生效
ldconfig -p | grep libmodbus.so.5

3. 验证库文件完整性

确认库文件实际存在且权限正确:

ls -l /usr/local/lib/libmodbus.so*
# 预期输出示例:
# lrwxrwxrwx 1 root root     18 Jan  1 10:00 /usr/local/lib/libmodbus.so -> libmodbus.so.5.1.0
# lrwxrwxrwx 1 root root     18 Jan  1 10:00 /usr/local/lib/libmodbus.so.5 -> libmodbus.so.5.1.0
# -rwxr-xr-x 1 root root 123456 Jan  1 10:00 /usr/local/lib/libmodbus.so.5.1.0

4. 检查程序依赖关系

使用ldd确认程序链接的库路径:

ldd ./test_modbus | grep libmodbus
# 预期输出:
# libmodbus.so.5 => /usr/local/lib/libmodbus.so.5 (0x00007f8a1b2a0000)

完整修复流程示例:

#!/bin/bash

# 1. 检查库文件是否存在
if [ ! -f "/usr/local/lib/libmodbus.so.5" ]; then
    echo "Error: libmodbus.so.5 not found in /usr/local/lib"
    echo "Please reinstall libmodbus with sudo make install"
    exit 1
fi

# 2. 添加库路径到系统配置
echo "Adding /usr/local/lib to dynamic linker search path..."
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/libmodbus.conf'
sudo ldconfig

# 3. 验证修复
echo -e "\nVerifying..."
ldconfig -p | grep libmodbus.so.5
echo -e "\nRunning test program..."
LD_LIBRARY_PATH=/usr/local/lib ./test_modbus

关键点:

  • 系统默认仅搜索/lib和/usr/lib目录,自定义路径需显式配置
  • ldconfig命令用于更新动态链接器缓存,修改配置后必须执行
  • 临时方案LD_LIBRARY_PATH仅对当前会话有效,适合开发测试环境
  • 若使用非标准路径(如~/local),需在编译时通过-Wl,-rpath指定运行时路径:

gcc -o test_modbus test.c -lmodbus -I/usr/local/include/modbus -L/usr/local/lib -Wl,-rpath=/usr/local/lib

更多推荐