2010-06-25 4 views
2

Я пытаюсь использовать API для проприетарного устройства интерфейса во встроенной системе (Freescale HCS08), а предоставленные файлы включают в себя заголовки (.h) и библиотеки (.lib). Заголовок компилируется с остальной частью моего кода (стандарт C), но при попытке установить связь с библиотекой я получаю ошибки в памяти, говоря, что файл может быть поврежден.Является ли конкретная файловая платформа C .lib?

Мое понимание библиотек в C несколько ограничено, поскольку я работаю почти исключительно на встроенных системах, где не существует таких магических вещей, как stdio, files и dlls; но будет ли (или любая) библиотека конкретной платформой? Он содержит полностью (если есть какой-либо уровень) скомпилированного кода? Некоторые из других предоставленных файлов - это файлы проекта VS, поэтому, если это так, что .lib является специфичным для платформы, не было бы неожиданным, чтобы связать файл, предназначенный для x86-Windows для 8-разрядного компилятора, не удался; это может быть только я.

ответ

8

Не только является специфичным для процессора .lib-файлом (не было никакого способа связать код HCS08 с кодом x86), это специфическая привязка (CodeWarrior не будет разговаривать с SDCC, GCC/binutils не будет разговаривать с Visual Номер-студио).

+3

... а также OS-specific: в UNIX у вас есть файлы '.a' вместо' .lib'. – Amadan

0

Да. .lib содержит скомпилированный код, поэтому он зависит от платформы. Если у вас есть источник, вы сможете перекомпилировать его на свою платформу.

+0

Даже с исходным кодом это не всегда так просто. Часто исходный код имеет зависимости или использует определенные функции для конкретной платформы (в C, #ifdef _WIN32_ и т. Д.) Или некоторые специфические для компилятора функции. Я уверен, что вы можете найти код, написанный для gcc 2.97, который не будет работать с gcc 4, даже в той же среде Linux, например. – Bruno

+0

Он сказал «проприетарный», поэтому я выйду на конечность и скажу, что он этого не делает ... – Amadan

+0

Возможно удаленно. Я могу получить исходный код; в нем не должно быть много секретных вещей, поскольку в основном это тонна функций, которые генерируют/анализируют последовательные сообщения, а спецификация связи хорошо определена. Как и любая библиотека, я бы просто избавил меня от кучу времени, если мне не нужно переоценивать все: P –