【问题标题】:Header files for c code compiled by arm-gcc compilerarm-gcc编译器编译的c代码的头文件
【发布时间】:2013-05-28 18:15:05
【问题描述】:

我在要使用 arm-gcc 编译器编译的 c 代码中使用了 string.h 头文件,生成的可执行文件将在 android 设备上执行。 当我将可执行文件推送到设备上并执行它时,它向我显示了链接错误。 如何在这样的设备上使用 string.h 中的函数? 这些头文件是硬件特定的吗?

【问题讨论】:

  • 我使用了strstr(),错误是cannot link strstr
  • stdio.h 和 stdlib.h 中的函数也可以轻松完美地使用
  • 您在使用 NDK 吗?哪个编译器?
  • strstr() 存在于 bionic 中。你有一个工具/构建问题。
  • 我正在为这个项目使用 SDK

标签: android c gcc header-files cross-compiling


【解决方案1】:

ARM EABI 声明 ANSI C 库的头文件应由编译器提供,与库的来源无关。但是,如果您要进行交叉编译,则必须确保使用编译器附带的string.h,而不是来自本机系统。你得到了什么链接错误?

听起来strstrlibc 中不见了,这听起来很奇怪,我对此没有任何解释。如果您可以访问设备上的库,那么我会检查 objdump -t 是否定义了 strstr

【讨论】:

    【解决方案2】:

    如何在这样的设备上使用 string.h 中的函数?

    过去对我有用。

    这些头文件是硬件特定的吗?

    使用 NDK 工具,它们是特定于架构和平台(例如,Android 8、Android 14 等)的。

    除非 NDK 中存在严重错误(这似乎不太可能),否则我认为您可能需要再次检查您的构建。

    【讨论】:

    • 我试图重建代码,strstr 没有给出任何错误,但这是错误:cannot locate '__strlen_chk'... CANNOT LINK EXECUTABLE
    • 我正在使用 SDK 进行开发
    • AFAIK,Android SDK 没有捆绑 C 编译器。这就是 Android NDK 的用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多