2010-06-25 89 views
2

我试图在嵌入式系统(Freescale HCS08)上使用专用接口设备的API,并且提供的文件包括头文件(.h)和库文件(.lib)。头文件与我的其余代码(标准C)一起编译得很好,但是当试图链接到库时,我得到内存错误,指出文件可能已损坏。特定于C .lib文件平台吗?

我对C语言库的理解是有限的,因为我几乎完全在嵌入式系统上工作,像stdio,files和dll这样的魔术东西不存在;但(或任何)图书馆是否具有平台特定性?它是否完全包含(如果有任何类型的水平)编译代码?其他提供的一些文件是VS项目文件,因此,如果.lib是特定于平台的情况,则将用于x86-Windows的文件链接到8位编译器会失败,这并不意外;它可能只是我。

回答

8

不仅仅是一个.lib文件CPU专用(没有办法将HCS08代码链接到x86代码),它是特定于工具链的(CodeWarrior不会与SDCC通信,GCC/binutils不会与Visual交谈工作室)。

+3

...以及操作系统特定的:在UNIX上你有'.a'文件而不是'.lib'。 – Amadan 2010-06-25 18:11:43

0

是的.lib包含编译代码,因此它是平台特定的。如果你有源代码,你应该可以将它重新编译到你的平台上。

+0

即使使用源代码,它并不总是那么容易。通常,源代码要么具有依赖性,要么使用某些特定于平台的功能(在C,#ifdef _WIN32_等等)或某些编译器特有的功能。我敢肯定,你可以找到一些为gcc 2.97编写的代码,即使在同一个Linux环境下也不能用于gcc 4。 – Bruno 2010-06-25 18:12:42

+0

他说“专有”,所以我会走出去,说他不...... – Amadan 2010-06-25 19:08:19

+0

这是远程可能我可以得到的源代码;它不应该有太多秘密的东西,因为它大多数是生成/解析串行消息的函数,并且通信规范已经很好的定义了。像任何图书馆一样,如果我不需要重新实现一切,只需要节省大量时间:P – 2010-06-25 20:06:03