Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как подключить .с файл к проекту


Автор: Hose 6.6.2006, 10:57
Приветствую.

Пишу програму в VS 2003.
хочу в своей программе использовать некоторую опенсорсную библиотеку(написанную мною). Библиотека в Си стиле и состоит из 2х фалов: ххх.с и ххх.h
Добавляю оба файла в проект. делаю #include "xxx.h". Нажимаю билд. мне выдает:

Код

Example error LNK2019: unresolved external symbol "long __cdecl ... referenced in function _main
Example error LNK2019: unresolved external symbol "long __cdecl ... referenced in function _main


если изменить имя файла на ххх.cpp или в его свойствах установить Compile as C++ или просто сделать #include xxx.c, то все прекрасно работает.

Так вот собственно вопрос почему так? как правильнее подключать Сишные файлы?

Спасибо. 

Автор: Prehistorik 6.6.2006, 11:53
Ээээ ... А как ты объявляешь функции в *.c файле? 

Автор: Earnest 6.6.2006, 18:45
Вoт только #include "xxx.c" не надо делать...

C и С++ функции по разному компилируются (получают разные имена). Когда ты компилируешь c-файл, они, надо полагать, компилируются как C... А main ожидает (ищет) C++ имена. 
Для начала определись, что тебе нужно: C++ или С. Если тебе все же нужен именно C, опиши функции в h-файле как extern "C". В противном случае либо переименуй файл в .cpp, либо поставь опцию "компилировать как C++" (лучше первое). 

Автор: ZeusAtVingrad 6.6.2006, 19:23
Так если один и тот же компилятор в одном и том же проекте компилит разные файлы, то уж разберётся он, наверное, в именах функций-то.
Сдаётся мне, что у него просто при сборке не указан второй объектный файл.
ИМХО. 

Автор: Earnest 6.6.2006, 19:30
Да ну? 
Цитата(Hose @  6.6.2006,  11:57 Найти цитируемый пост)
если изменить имя файла на ххх.cpp или в его свойствах установить Compile as C++ ... то все прекрасно работает.

Каждая единица компиляции (читай файл) компилируется независимо от других. 
C-файлы по-умолчанию компилируются как С. А еще бывает ASM, RC, ... а также своих файлов и компилаторов к ним навешать можно. Среда с ними разбирается обычно на основе расширения и\или опций. 

Автор: ZeusAtVingrad 6.6.2006, 20:24
А, ну да - это я пропустил.
Просто со "средами" я с универа не работаю, всё как-то больше makefile'ами.  

Автор: Hose 7.6.2006, 13:49
Всем cпасибо.

Сделал 
Код

extern "C"
{
#include "xxx.h"
}
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)