Товарищи такая проблема.
Есть собственная либа на С. Собираю ее как статической так и динамической - как хочу. Есть прога на c++, графическая. Написана с использованием FLTK.
Чтоб ее скомпилить делаю стандартный финт:
gcc -o myproga ./myproga.cpp <куча всяких либ динамических и статических>Все компилится и я счастлив. Но вот мою либу надо приделать. Ставлю ее в систему. ldconfig и тп. Добавляю опцию в запуск компилятора. Линкер ее находит, но вот функции из нее - не видит. Имею такую ошибку:
./myproga.o(.text+0xb0): In function `main':
: undefined reference to `MyFunc(int)'
collect2: ld returned 1 exit statusЕсли я компилирую при таких же опциях с той же либой программу, написанную на С - то все компилируется...
В чем дело? Не пойму... Подскажите...
>В чем дело? Не пойму... Подскажите...Дело в том, что Си++ компилятор, в отличие от Си компилятора, меняет имена вызываемых функций (так как нет стандарта, описывающего такие имена для объектных файлов). Из-за этого MyFunc надо определять как extern "C". Чтобы Си++ испольщовал Си-стайл имя.
I.E.:
/// @file test.h
#ifdef __cplusplus
extern "C" {
#endifint MyFunc(int);
#ifdef __cplusplus
}
#endif
спасибо
все собралось