【问题标题】:Is a C .lib file platform specific?C .lib 文件平台是特定的吗?
【发布时间】:2010-06-25 18:05:09
【问题描述】:

我正在尝试将 API 用于嵌入式系统 (Freescale HCS08) 上的专有接口设备,提供的文件包括头文件 (.h) 和库 (.lib)。标头可以与我的其余代码(标准 C)一起正常编译,但是在尝试链接库时出现内存错误,提示文件可能已损坏。

我对 C 语言库的理解有些有限,因为我几乎只在嵌入式系统上工作,在这些系统中不存在诸如 stdio、文件和 dll 之类的神奇事物;但是(或任何)库会是特定于平台的吗?它是否包含完全(如果那里有任何级别)编译的代码?提供的其他一些文件是 VS 项目文件,因此如果 .lib 是特定于平台的,那么将用于 x86-Windows 的文件链接到 8 位编译器会失败也就不足为奇了;可能只有我。

【问题讨论】:

    标签: c platform-specific


    【解决方案1】:

    是的,.lib 包含已编译的代码,因此它是特定于平台的。如果您有源代码,您应该能够将其重新编译到您的平台。

    【讨论】:

    • 即使有源代码,也并非总是那么容易。通常,源代码要么具有依赖关系,要么使用某些特定于平台的功能(在 C 中,#ifdef WIN32 等),或一些特定于编译器的功能。我相信您可以找到一些为 gcc 2.97 编写的代码,这些代码不适用于 gcc 4,即使在相同的 Linux 环境中也是如此。
    • 我有可能得到源代码;里面不应该有太多秘密的东西,因为它主要是生成/解析串行消息的大量函数,并且通信规范定义明确。像任何库一样,如果我不必重新实现所有内容,只会为我节省大量时间:P
    【解决方案2】:

    .lib 文件不仅是 CPU 特定的(无法将 HCS08 代码链接到 x86 代码),它是工具链特定的(CodeWarrior 不会与 SDCC 对话,GCC/binutils 不会与 Visual Studio 对话)。

    【讨论】:

    • ...还有特定于操作系统的:在 UNIX 上,您有 .a 文件而不是 .lib 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多