因此,我试图使用一个手臂精灵交叉编译器使用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中提供。
发布于 2014-08-19 05:28:24
由于libmodbus包安装在前缀提供的位置,因此在
--prefix=/usr/local/arm-elf
在编译程序modbus_read_register.c时,应指定此路径。
手臂精灵gcc -o modbus_read_register -Wl -elf2flt -v -lmodbus modbus_read_register.c -L/usr/local/arm-elf/lib
在这里,-L选项将重定向链接器以搜索指定目录中的文件。
https://stackoverflow.com/questions/25373516
复制相似问题