编译的可执行文件在MIPS路由器上停止,未找到""

时间:2017-11-01 11:56:09

标签: gcc compilation mips cross-compiling

我的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

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

运行readelf -l gpio | grep -i interpreter。它应该显示需要存在的ldso的路径。您可以将其与系统上/bin/sh上正在运行的readelf进行比较,以查看其预期结果。

如果路径不同,您可以将-Wl,-dynamic-linker,/path添加到Makefile的LDFLAGS中(显然用实际路径替换/path。)