2011-05-21 37 views
4

如果我在Mac 10.6編譯一個32位可執行文件,與-m32標誌,如:在Mac 10.6上以32位模式運行valgrind?

的gcc -m32 test.c的-o測試

在 「測試」 運行Valgrind的失敗,出現錯誤:

的valgrind:./test:不能執行二進制文件

是否有任何標誌傳遞給Valgrind的執行呢?是在32位模式下編譯valgrind的唯一選擇嗎?

由於

+0

嘗試完全刪除'-m32'標誌。該錯誤意味着二進制文件不適合您的體系結構(64位)。 – Blender 2011-05-21 15:53:19

回答

1

攪拌機,所述-m32標誌只是意味着編譯在32位模式下的文件。 Mac 10.6可以運行32位可執行文件。

+0

請使用評論回答其他評論。答案是*真實的*你的問題的答案。 – 2011-05-22 21:44:49

+0

是的,但是評論按鈕在Blender的評論或您的第一條評論下是不可見的。不過,這是在這個評論之下。錯誤? – silmaersti 2011-05-23 02:29:32

0

Valgrind的哪個版本有問題?

在Linux和MacOS上,Valgrind的一個版本可以自動檢測併爲32位和64位二進制文​​件做正確的事情。

這是我看到Mac OS X 10.6.7 (10J869)

$ echo "int main() { free(1); return 0; }" | gcc -xc - -g -o a.out 
$ echo "int main() { free(1); return 0; }" | gcc -xc - -g -o a.out32 -m32 
$ valgrind --version 
valgrind-3.7.0.SVN 

$ valgrind ./a.out 
==46102== Memcheck, a memory error detector 
==46102== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. 
==46102== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info 
==46102== Command: ./a.out 
==46102== 
--46102-- ./a.out: 
--46102-- dSYM directory is missing; consider using --dsymutil=yes 
==46102== Invalid free()/delete/delete[]/realloc() 
==46102== at 0x100010E9F: free (vg_replace_malloc.c:366) 
==46102== by 0x100000F26: main (in ./a.out) 
==46102== Address 0x1 is not stack'd, malloc'd or (recently) free'd 
==46102== 
==46102== 
==46102== HEAP SUMMARY: 
==46102==  in use at exit: 88 bytes in 1 blocks 
==46102== total heap usage: 1 allocs, 1 frees, 88 bytes allocated 
==46102== 
==46102== LEAK SUMMARY: 
==46102== definitely lost: 0 bytes in 0 blocks 
==46102== indirectly lost: 0 bytes in 0 blocks 
==46102==  possibly lost: 0 bytes in 0 blocks 
==46102== still reachable: 0 bytes in 0 blocks 
==46102==   suppressed: 88 bytes in 1 blocks 
==46102== 
==46102== For counts of detected and suppressed errors, rerun with: -v 
==46102== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) 

$ valgrind ./a.out32 
==46103== Memcheck, a memory error detector 
==46103== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. 
==46103== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info 
==46103== Command: ./a.out32 
==46103== 
--46103-- ./a.out32: 
--46103-- dSYM directory is missing; consider using --dsymutil=yes 
==46103== Invalid free()/delete/delete[]/realloc() 
==46103== at 0xF7D8: free (vg_replace_malloc.c:366) 
==46103== by 0x1F7B: main (in ./a.out32) 
==46103== Address 0x1 is not stack'd, malloc'd or (recently) free'd 
==46103== 
==46103== 
==46103== HEAP SUMMARY: 
==46103==  in use at exit: 320 bytes in 7 blocks 
==46103== total heap usage: 7 allocs, 1 frees, 320 bytes allocated 
==46103== 
==46103== LEAK SUMMARY: 
==46103== definitely lost: 0 bytes in 0 blocks 
==46103== indirectly lost: 0 bytes in 0 blocks 
==46103==  possibly lost: 0 bytes in 0 blocks 
==46103== still reachable: 260 bytes in 6 blocks 
==46103==   suppressed: 60 bytes in 1 blocks 
==46103== Rerun with --leak-check=full to see details of leaked memory 
==46103== 
==46103== For counts of detected and suppressed errors, rerun with: -v 
==46103== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) 
0

我有這個問題太,配合內置的valgrind /通過MacPorts的安裝。然而,當我自己建造它時,問題就消失了。我可以確認在沒有額外配置選項的情況下valgrind的默認版本支持Snow Leopard上的32位和64位程序(使用版本3.6.1)。

相關問題