所以,我正在尝试使用arm-elf交叉编译器使用libmodbus构建一个小程序,并且我不断为libmodbus获取未定义的引用错误,即使它是为交叉编译器和lib文件夹构建的。
我已经构建了libmodbus
./configure --host=arm-elf --prefix=/usr/local/arm-elf
make && make install
然后,我编写了我的程序,确保包含modbus标题
#include <modbus/modbus.h>
并编译它
arm-elf-gcc -o modbus_read_register -Wl,-elf2flt -v -lmodbus modbus_read_register.c
但总是失败,我认为是连接阶段
/usr/local/lib/gcc-lib/arm-elf/2.95.3/collect2 -X -o modbus_read_register /usr/local/arm-elf/lib/crt0.o -L/usr/local/lib/gcc-lib/arm-elf/2.95.3 -L/usr/local/arm-elf/lib -elf2flt -lmodbus /tmp/cc000Bvc.o -lgcc -lc -lgcc
modbus_read_register.elf2flt(.text+0x88): In function `main':
: undefined reference to `modbus_new_tcp'
modbus_read_register.elf2flt(.text+0x98): In function `main':
: undefined reference to `modbus_connect'
modbus_read_register.elf2flt(.text+0xb0): In function `main':
: undefined reference to `modbus_strerror'
modbus_read_register.elf2flt(.text+0xcc): In function `main':
: undefined reference to `modbus_free'
modbus_read_register.elf2flt(.text+0x11c): In function `main':
: undefined reference to `modbus_read_registers'
modbus_read_register.elf2flt(.text+0x13c): In function `main':
: undefined reference to `modbus_strerror'
modbus_read_register.elf2flt(.text+0x1cc): In function `main':
: undefined reference to `modbus_close'
modbus_read_register.elf2flt(.text+0x1d4): In function `main':
: undefined reference to `modbus_free'
collect2: ld returned 1 exit status
make: *** [modbus_read_register] Error 1
我无法弄清楚链接器无法正常工作的原因,因为libmodbus.a文件位于正确的路径并且在args中提供。
答案 0 :(得分:2)
由于您的libmodbus包安装在前缀提供的位置,即
- 前缀= <强>的/ usr /本地/臂精灵强>
编译程序时应指定此路径 modbus_read_register.c
arm-elf-gcc -o modbus_read_register -Wl,-elf2flt -v -lmodbus modbus_read_register.c
的 -L / USR /本地/臂精灵/ lib中强>
此处-L选项将重定向链接器以搜索指定目录中的文件