2011-04-10 244 views
2

我想用cygwin交叉編譯strace到Android模擬器。我用這個article 作爲我的出發點。我按照這些instructions安裝了交叉編譯器。然後,我準備用使用cygwin交叉編譯到arm-linux

./configure -host=arm-linux 

現在的Makefile,當我做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 

這就算我追加-static Makefile中的CFLAGS變量之後(我爲什麼要發生做這個?)。請幫忙。

這裏是線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; 

回答

2

首先,什麼是BLKGETSIZE64 #define的作爲? 定義中可能會隱藏一個「u64」令牌。

就arm-linux-gcc而言,64位int實際上是一個明確定義的對象嗎?只是一個想法...但它一定是,對吧?

而CFLAGS的靜態添加會導致二進制程序靜態鏈接,而不是動態鏈接。 這意味着所有需要運行的代碼都將被內置到可執行文件中。 通常情況下,它會動態鏈接到共享對象庫(.so文件,Windows下的DLL),但是您不一定依靠程序需要包含在嵌入式設備中的特定庫。您可以(可能)通過將相關位構建到可執行文件中來節省空間,而不是將所有庫安裝在掌上電腦上。