C 与libudev.h交叉编译

C 与libudev.h交叉编译,c,gcc,arm,C,Gcc,Arm,操作系统:ubuntu 14.04 x64 我试图使用ARM架构的设备驱动程序交叉编译一个程序,但收到了错误。我已经下载了libudev-dev和libusb-1.0-0-dev 如果我使用-ludev,但不直接链接到libudev.h文件,编译器将找不到它。如果我确实链接到它,那么编译器似乎不能正确使用它,因为它无法识别其中的结构 $ arm-xilinx-linux-gnueabi-gcc -o testing ./user_periph_test.c -ludev /opt/Xilinx/

操作系统:ubuntu 14.04 x64

我试图使用ARM架构的设备驱动程序交叉编译一个程序,但收到了错误。我已经下载了libudev-dev和libusb-1.0-0-dev

如果我使用-ludev,但不直接链接到libudev.h文件,编译器将找不到它。如果我确实链接到它,那么编译器似乎不能正确使用它,因为它无法识别其中的结构

$ arm-xilinx-linux-gnueabi-gcc -o testing ./user_periph_test.c -ludev
/opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/../lib/gcc/arm-xilinx-linux-gnueabi/4.9.2/../../../../arm-xilinx-linux-gnueabi/bin/ld: cannot find -ludev
collect2: error: ld returned 1 exit status


$ arm-xilinx-linux-gnueabi-gcc -o testing ./user_periph_test.c -I/home/user/devDriver/userPeriphDriver/test
/tmp/cc23v4yv.o: In function `read_fpga_status':
user_periph_test.c:(.text+0x400): undefined reference to `udev_new'
user_periph_test.c:(.text+0x42c): undefined reference to `udev_enumerate_new'
user_periph_test.c:(.text+0x440): undefined reference to `udev_enumerate_add_match_sysname'
user_periph_test.c:(.text+0x448): undefined reference to `udev_enumerate_scan_devices'
user_periph_test.c:(.text+0x450): undefined reference to `udev_enumerate_get_list_entry'
user_periph_test.c:(.text+0x470): undefined reference to `udev_enumerate_add_match_sysname'
user_periph_test.c:(.text+0x478): undefined reference to `udev_enumerate_scan_devices'
user_periph_test.c:(.text+0x480): undefined reference to `udev_enumerate_get_list_entry'
user_periph_test.c:(.text+0x4ac): undefined reference to `udev_list_entry_get_next'
user_periph_test.c:(.text+0x4d4): undefined reference to `udev_list_entry_get_name'
user_periph_test.c:(.text+0x4e4): undefined reference to `udev_device_new_from_syspath'
user_periph_test.c:(.text+0x4f8): undefined reference to `udev_device_get_sysattr_value'
user_periph_test.c:(.text+0x510): undefined reference to `udev_device_get_syspath'
user_periph_test.c:(.text+0x530): undefined reference to `udev_enumerate_unref'
user_periph_test.c:(.text+0x538): undefined reference to `udev_unref'
/tmp/cc23v4yv.o: In function `get_params_from_sysfs':
user_periph_test.c:(.text+0x564): undefined reference to `udev_new'
user_periph_test.c:(.text+0x590): undefined reference to `udev_enumerate_new'
user_periph_test.c:(.text+0x5a4): undefined reference to `udev_enumerate_add_match_sysname'
user_periph_test.c:(.text+0x5ac): undefined reference to `udev_enumerate_scan_devices'
user_periph_test.c:(.text+0x5b4): undefined reference to `udev_enumerate_get_list_entry'
user_periph_test.c:(.text+0x5cc): undefined reference to `udev_list_entry_get_name'
user_periph_test.c:(.text+0x5dc): undefined reference to `udev_device_new_from_syspath'
user_periph_test.c:(.text+0x5e8): undefined reference to `udev_device_get_syspath'
user_periph_test.c:(.text+0x60c): undefined reference to `udev_device_get_sysattr_value'
user_periph_test.c:(.text+0x638): undefined reference to `udev_device_get_sysattr_value'
user_periph_test.c:(.text+0x664): undefined reference to `udev_device_get_sysattr_value'
user_periph_test.c:(.text+0x6d0): undefined reference to `udev_list_entry_get_next'
user_periph_test.c:(.text+0x6e8): undefined reference to `udev_enumerate_unref'
user_periph_test.c:(.text+0x6f0): undefined reference to `udev_unref'
collect2: error: ld returned 1 exit status

但是,在不使用xcompiling的情况下进行构建:

$ gcc -o fuckme ./user_periph_test.c -ludev

以下是.c文件中使用的标题:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <libudev.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括

我认为这是链接器错误,请尝试使用
gcc-o fuckme./user\u periph\u test.c-Ludev
。在常规gcc命令上运行该命令(忽略xcomp)会对所有未定义的引用产生相同的错误输出。如果您的本机编译器喜欢库,而交叉链接器不喜欢,那么您显然没有下载ARM库,而是x86版本。你能做一个
文件检查吗?这很有道理。。。文件似乎没有告诉我,是吗
$file libudev.h libudev.h:C源代码,ASCII文本
我在中查找了正确的文件
find./-name libudev*,但在那里没有看到它。。。如果不在这里,不确定在哪里可以找到它?我认为这是链接器错误,请尝试使用
gcc-o fuckme./user\u periph\u test.c-Ludev
。在常规gcc命令上运行该命令(忽略xcomp)会产生与所有未定义引用相同的错误输出。如果本机编译器喜欢该库,而交叉链接器不喜欢,您显然没有下载ARM库,而是下载x86版本。你能做一个
文件检查吗?这很有道理。。。文件似乎没有告诉我,是吗
$file libudev.h libudev.h:C源代码,ASCII文本
我在中查找了正确的文件
find./-name libudev*,但在那里没有看到它。。。如果不在这里,不知道在哪里可以找到它?