La liaison C de C++ dans OS X Mavericks

Soit passé à OS X Mavericks et XCode 5.0.1, je ne peux plus gracieusement lien compilé C (fichiers de sortie de gcc) pour un projet C++ (la sortie de g++).

La délinquance de la paire de commandes de produits à partir de mon makefile:

gcc `pkg-config --cflags glib-2.0` -g -Wall -O3 `pkg-config --cflags flann`   -c -o vec.o vec.c
g++ `pkg-config --cflags glib-2.0` -g -Wall -O3   -stdlib=libstdc++ -lstdc++  layoutquality.cpp vec.o  `pkg-config --libs glib-2.0`  -L/usr/local/Cellar/flann/1.8.4/lib -lflann -o layoutquality

À qui l'éditeur de liens se plaint:

Les symboles non définis pour l'architecture x86_64:
"load_dmat(char const*)", référencé à partir de:
_main dans layoutquality-I8HOqy.o
ld: symbole(s) ne se trouvent pas pour l'architecture x86_64

load_dmat est juste une fonction dans le fichier vec.c . Si je remplace l' gcc avec g++ dans la première ligne, puis tout se compile et des liens bien, mais clang dit:

clang: avertissement: le traitement de " c "entrée" c++", alors qu'en C++, ce comportement est déconseillé

Est-il inoffensif, non-déconseillé façon de les compiler et de les relier? La liaison avec g++ avec les fichiers objets du gcc fonctionnait bien avant que je mis à niveau vers OS X Mavericks et les nouveaux outils de ligne de commande. Aucune information sur ce qui a changé et comment aller de l'avant serait super, merci.

Utilisez-vous extern "C" dans la déclaration de la load_dmat qui est compilé dans un module C++? Si non, un compilateur C++ pourrait s'attendre à une déformation du nom.
Non, je ne le fais pas, où faut-il aller? Dans l'en-tête vec.h ou la source de vec.c? Cependant, j'hésite à modifier vec.* car il est utilisé par d'autres projets.
Dans l'en-tête, joignez à votre déclaration comme: extern "C" { void load_dmat(char const*); }. Utilisation #ifdef __cplusplus (comme dans la réponse ci-dessous) pour maintenir les projets C intacte.
Vous pouvez remplacer "gcc" avec "bruit" et "g++" avec "clang++" de toute façon, pour obtenir dans l'habitude de ne pas utiliser obsolète les liens symboliques à clang.
Ne pense pas que c'est le nom d'amputation. Voir ma réponse à @Inspiré

OriginalL'auteur stephen f | 2013-10-28