使用cygwin交叉编译到arm-linux

时间:2011-04-10 15:00:24

标签: android cygwin

我正在尝试使用cygwin交叉编译strace到Android模拟器。我用过这个article 作为我的出发点。我按照这些instructions安装了交叉编译器。然后我使用

准备了makefile
./configure -host=arm-linux

现在当我make时,我收到以下错误:

$ make
make  all-recursive
make[1]: Entering directory `/home/bruce/strace-4.6'
Making all in tests
make[2]: Entering directory `/home/bruce/strace-4.6/tests'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/bruce/strace-4.6/tests'
make[2]: Entering directory `/home/bruce/strace-4.6'
arm-linux-gcc -DHAVE_CONFIG_H -I.  -I./linux/arm -I./linux -I./linux  -Wall -Wwr
ite-strings -g -O2 -MT block.o -MD -MP -MF .deps/block.Tpo -c -o block.o block.c

block.c: In function `block_ioctl':
block.c:198: error: `u64' undeclared (first use in this function)
block.c:198: error: (Each undeclared identifier is reported only once
block.c:198: error: for each function it appears in.)
block.c:271: error: `BLKTRACESTOP' undeclared (first use in this function)
make[2]: *** [block.o] Error 1
make[2]: Leaving directory `/home/bruce/strace-4.6'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/bruce/strace-4.6'
make: *** [all] Error 2

即使我在Makefile中的CFLAGS变量之后追加-static,也会发生这种情况(为什么我需要这样做?)。请帮忙。

以下是第198-206行:

case BLKGETSIZE64:
        if (exiting(tcp)) {
            uint64_t val;
            if (syserror(tcp) || umove(tcp, arg, &val) < 0)
                tprintf(", %#lx", arg);
            else
                tprintf(", %" PRIu64, val);
        }
        break;

1 个答案:

答案 0 :(得分:2)

首先,什么是BLKGETSIZE64 #defined? 定义中可能隐藏着“u64”令牌。

就arm-linux-gcc而言,64位int实际上是一个定义良好的对象吗?只是一个想法......但它一定是,对吧?

CFLAGS的-static添加导致二进制程序静态链接,而不是动态链接。 这意味着它需要运行的所有代码都将构建到可执行文件中。 通常,它会动态链接到共享对象库(.so文件,Windows下的DLL),但您不一定要指望程序需要包含在嵌入式设备中的特定库。您可以(可能)通过在可执行文件中构建相关位来节省空间,而不是在手持设备上安装所有库。