我的ASUS RT-AC66U需要一些GPIO。这就是我用MCP2221A制作电路板的原因。
使用this source我能够构建可执行文件并在我的x86-64bit计算机(Xubuntu 16.04)上运行它,一切正常。
现在我已将相同的源交叉编译为MIPS并收到此错误:
frashman@ASUS-RT-AC66U:/tmp/home/root/gpio$ ls -la
drwxrwxrwx 2 frashman root 180 Nov 1 12:16 .
drwx------ 4 frashman root 100 Nov 1 12:16 ..
-rw-rw-rw- 1 frashman root 485 Nov 1 12:16 Makefile
-rwxrwxr-x 1 frashman root 10044 Nov 1 12:16 gpio
-rw-rw-r-- 1 frashman root 19857 Nov 1 12:16 hid.c
-rw-rw-r-- 1 frashman root 13870 Nov 1 12:16 hidapi.h
-rw-rw-r-- 1 frashman root 24758 Nov 1 12:16 libmcp2221.h
-rw-rw-r-- 1 frashman root 3122 Nov 1 12:16 main.c
-rw-rw-r-- 1 frashman root 4456 Nov 1 12:16 main.o
frashman@ASUS-RT-AC66U:/tmp/home/root/gpio$ ./gpio
-sh: ./gpio: not found
好的,所以我用Debian subsystem在路由器上构建源代码,二进制文件运行没有错误(除了0找到的设备 - 在写这个时没有连接)
root@ASUS-RT-AC66U:/home/admin/gpio$ ./gpio
Starting!
Looking for devices... found 0 devices
Opening device... No MCP2221s found
但是,如果我想在路由器的主系统上运行这个二进制文件,它将以相同的错误停止:
frashman@ASUS-RT-AC66U:/tmp/mnt/entware/entware/debian/home/admin/gpio$ ./gpio
-sh: ./gpio: not found
这是makefile:
PROJECT=gpio
SOURCES= \
main.c
CFLAGS= \
-c \
-Wall \
-Wextra \
-Wstrict-prototypes \
-Wunused-result \
-O3 \
-std=c99 \
-fmessage-length=0 \
-mtune=mips32r2 \
-mips32r2
LDFLAGS= \
-s
LDLIBS= \
-lmcp2221
EXECUTABLE=$(PROJECT)
CC=mipsel-linux-gnu-gcc
OBJECTS=$(SOURCES:.c=.o)
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -rf *.o $(EXECUTABLE)
.PHONY: clean all
有谁知道为什么会这样?
答案 0 :(得分:0)
运行readelf -l gpio | grep -i interpreter
。它应该显示需要存在的ldso的路径。您可以将其与系统上/bin/sh
上正在运行的readelf进行比较,以查看其预期结果。
如果路径不同,您可以将-Wl,-dynamic-linker,/path
添加到Makefile的LDFLAGS中(显然用实际路径替换/path
。)