首页 > 解决方案 > 使用未定义的引用对 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++jenkinslinkerg++

解决方案


推荐阅读