2013-05-28 46 views
2

我在c代碼中使用了string.h頭文件,該代碼使用arm-gcc編譯器進行編譯,並且生成的可執行文件將在android設備上執行。 當我將可執行文件推送到設備並執行它時,它向我提供了鏈接錯誤。 如何在這樣的設備上使用string.h中的函數? 這些頭文件是硬件特定的嗎?由arm-gcc編譯器編譯的c代碼的頭文件

+0

錯誤是什麼? –

+0

我使用strstr()和錯誤是 無法鏈接strstr – uncreative

+0

也從stdio.h和stdlib.h函數可以很容易和完美地使用 – uncreative

回答

1

ARM EABI指出,ANSI C庫的頭文件應由編譯程序獨立於庫的位置提供。如果你正在交叉編譯,你必須確保你使用編譯器附帶的string.h,而不是本地系統。你得到了什麼連接錯誤?

聽起來像strstrlibc中缺少,這聽起來很奇怪,我沒有解釋它。如果您有權訪問設備上的庫,那麼我會檢查objdump -t,如果它定義爲strstr

0

如何在這樣的設備上使用string.h中的函數?

它在過去對我有效。

這些頭文件是硬件特定的嗎?

使用NDK工具,它們是具體的體系結構和平臺(例如,Android 8,Android 14等)。

除非NDK中存在嚴重的錯誤(這似乎不太可能),否則我認爲您可能需要再次檢查構建。

+0

我試圖重建代碼和strstr沒有給出任何錯誤,但這是錯誤:'無法找到'__strlen_chk'... CAN NOT LINK EXECUTABLE' – uncreative

+0

我正在使用SDK開發 – uncreative

+0

AFAIK,Android SDK沒有與其捆綁的C編譯器。這就是Android NDK的用途。 – ldav1s