2010-06-25 18 views
2

J'essaie d'utiliser une API pour un périphérique d'interface propriétaire sur un système embarqué (Freescale HCS08), et les fichiers fournis incluent des en-têtes (.h) et des bibliothèques (.lib). L'en-tête se compile bien avec le reste de mon code (standard C), mais en essayant de lier avec la bibliothèque, j'ai des erreurs de mémoire disant que le fichier pourrait être corrompu.Est-ce qu'une plateforme de fichier C .lib est spécifique?

Ma compréhension des bibliothèques en C est quelque peu limitée car je travaille presque exclusivement sur des systèmes embarqués où des choses magiques comme les fichiers stdio, les fichiers et les DLL n'existent pas; mais la bibliothèque (ou toute bibliothèque) serait-elle spécifique à la plate-forme? Est-ce qu'il contient entièrement (s'il y a une sorte de niveau) du code compilé? Certains des autres fichiers fournis sont des fichiers de projet VS, donc si .lib est spécifique à la plate-forme, il ne serait pas inattendu que lier un fichier destiné à x86-Windows à un compilateur 8 bits échouerait; ça pourrait être juste moi.

Répondre

8

Non seulement un fichier .lib est spécifique à l'UC (il n'y aurait aucun moyen de lier le code HCS08 au code x86), mais il est spécifique à l'outil (CodeWarrior ne parle pas à SDCC, GCC/binutils ne parle pas à Visual Studio).

+3

... et aussi spécifique au système d'exploitation: sous UNIX, vous avez des fichiers '.a' au lieu de' .lib'. – Amadan

0

Oui, le fichier .lib contient du code compilé, donc il est spécifique à la plate-forme. Si vous avez la source, vous devriez pouvoir la recompiler sur votre plateforme.

+0

Même avec le code source, ce n'est pas toujours facile. Souvent, le code source a des dépendances ou utilise certaines fonctionnalités spécifiques à la plate-forme (en C, #ifdef _WIN32_, etc.), ou certaines fonctionnalités spécifiques au compilateur. Je suis sûr que vous pouvez trouver du code écrit pour gcc 2.97 qui ne fonctionnera pas avec gcc 4, même sur le même environnement Linux par exemple. – Bruno

+0

Il a dit "propriétaire", donc je vais sortir sur un membre et dire qu'il ne le fait pas ... – Amadan

+0

Il est possible à distance que je puisse obtenir le code source; Il ne devrait pas y avoir beaucoup de choses secrètes car c'est surtout une tonne de fonctions qui génèrent/analysent des messages série, et la spécification des communications est bien définie. Comme n'importe quelle bibliothèque, cela me sauverait une tonne de temps si je ne devais pas tout réimplémenter: P –