c++ - 使用未定义的引用对 Ubuntu 开发机器上的链接器加载程序错误进行故障排除
问题描述
必须开发系统设置、本地 Ubuntu 机器和 Ubuntu Jenkins 服务器。该项目在本地开发机器上构建,但是在 Jenkins 上构建时出现以下错误:
g++ -std=gnu++11 -fPIC -o app_bboxd comm_modbus.o bboxes.o -L../lib -lmodbus -lpthread -lrt
comm_modbus.o: In function `COMM_MODBUS__OpenRtu':
/var/lib/jenkins/workspace/cutom-build/trunk/comm_modbus.c:273: undefined reference to `modbus_rtu_set_rts'
collect2: error: ld returned 1 exit status
make[1]: *** [app_bboxd] Error 1
由于某种原因,链接器找不到该函数。当我使用一些内置命令时,我可以看到库和函数存在:
tes@ubuntu:~/workspace/trunk$ grep -rn -i "modbus_rtu_set_rts" /usr/local/include/modbus
/usr/local/include/modbus/modbus-rtu.h:44:MODBUS_API int modbus_rtu_set_rts(modbus_t *ctx, int mode);
test@ubuntu:~/workspace/trunk$ ls -l /usr/local/lib | grep libmodbus
-rwxr-xr-x 1 root root 919 Jun 8 08:46 libmodbus.la
lrwxrwxrwx 1 root root 18 Jun 8 08:46 libmodbus.so -> libmodbus.so.5.1.0
lrwxrwxrwx 1 root root 18 Jun 8 08:46 libmodbus.so.5 -> libmodbus.so.5.1.0
-rwxr-xr-x 1 root root 121972 Jun 8 08:46 libmodbus.so.5.1.0
test@ubuntu:~/workspace/trunk$
test@ubuntu:~/workspace/trunk$ nm /usr/local/lib/libmodbus.so.5.1.0 | grep modbus_rtu_set_rts
00005a70 T modbus_rtu_set_rts
test@ubuntu:~/workspace/trunk$
可能是什么问题呢?我如何弄清楚为什么它在共享对象中找不到这个函数?
解决方案
推荐阅读
- c# - Get List from Enum name as string
- django - 在 django 中使用 modelforms 将图像上传到数据库
- sql - 更新表格产品中的日期
- java - Spring:如何将请求发布到多对多关系中
- amazon-web-services - 在 AWS EMR 中提交 Spark 作业
- json - 聚合相似的对象对字段求和
- javascript - 如何在 react admin v3 中设置时区?
- swift - 为什么不能在 Swift 中从 Facebook Graph API 下载图像?
- command-line - wget 和外部图像的问题
- javascript - 使用 javascript 检测用户的区域设置是否设置为 12 小时或 24 小时时间格式