URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4181
[ Назад ]

Исходное сообщение
"Не линкуется либа!"

Отправлено Apels1n , 15-Апр-05 16:31 
Товарищи такая проблема.
Есть собственная либа на С. Собираю ее как статической так и динамической - как хочу. Есть прога на 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

Если я компилирую при таких же опциях с той же либой программу, написанную на С - то все компилируется...

В чем дело? Не пойму... Подскажите...


Содержание

Сообщения в этом обсуждении
"Не линкуется либа!"
Отправлено Vladislav Lazarenko , 15-Апр-05 17:00 

>В чем дело? Не пойму... Подскажите...

Дело в том, что Си++ компилятор, в отличие от Си компилятора, меняет имена вызываемых функций (так как нет стандарта, описывающего такие имена для объектных файлов). Из-за этого MyFunc надо определять как extern "C". Чтобы Си++ испольщовал Си-стайл имя.

I.E.:

/// @file test.h

#ifdef __cplusplus
extern "C" {
#endif

int MyFunc(int);

#ifdef __cplusplus
}
#endif


"Не линкуется либа!"
Отправлено Apels1n , 15-Апр-05 17:19 
спасибо
все собралось