2010-12-11 38 views
1

J'ai utilisé la bibliothèque C-RS232 dans mon code C++ pour contrôler une carte Arduino Uno. Dans mon main.cpp, je suis arrivé:Essayer de compiler le code C++ multi-plateforme. Référence indéfinie à la fonction C

#include "rs232.h" 

parce que dans le fichier d'en-tête de rs232.h, ils ont déjà:

#ifdef __cplusplus 
extern "C" { 
#endif 

Dans un dossier, j'ai: main.cpp rs232. h rs232.c stdafx.h stdafx.cpp

et j'utilise Cygwin pour compiler afin que le code pourrait être utilisé pour Linux:

g++ main.cpp 

mais j'ai eu des erreurs avec "... référence non définie à '_OpenComport'" et similaire à toutes les fonctions C que j'ai appelé depuis mon main.cpp.

Quelqu'un peut-il me dire comment inclure le fichier d'en-tête C en C++? Ou est-ce que j'ai utilisé la mauvaise commande pour g ++?

Répondre

4

Vous devez passer tous les fichiers source au compilateur, comme si

g++ -o demo.exe main.cpp rs232.c stdafx.cpp 

Vous pouvez également compiler des pièces dans une bibliothèque, et de compilation séparées et étapes lien.

+0

Merci ... cela fonctionne. Si simple mais si insaisissable pour une personne centrée sur Windows. – fred

+0

dans Windows si vous essayez de compiler uniquement main.cpp vous obtiendrez exactement la même erreur. – n0rd

+0

Eh bien, j'ai écrit le code en utilisant Visual Studio et je n'ai pas eu à faire un port pour Linux jusqu'à maintenant. – fred