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

Исходное сообщение
"Проблемы с линковкой .so .a в C++"

Отправлено FrOdO , 15-Авг-03 13:19 
Hi ALL.

У меня возникли проблемы с использованием кода С и С++. Пишу библиотеку функций на С, создаю .so (динамическую библиотеку) и пытаюсь вызвать функции из программы на С++. Выдается следующая ошибка:
-----
net_flow_test.o(.text+0x16): In function `main':: undefined reference to `check_true(int)'
collect2: ld returned 1 exit status
-----
int check_true(int); // находится в .so-ке

Если я использую компилятор С, то этой ошибки не выдается и программа компилируется нормально. По программированию в Windows я знаю, что С и С++ компиляторы по разному генерят имена функций в объектных файлах, но в них есть ключевые слова-расширения типа cdecl, чтобы указывать компилятору как генерить имена (с подчеркиванием или без). Аналогичные проблемы возникают если я использую статические библиоте (.a). Как мне выйти из положения?

У меня: gcc 3.2.2, Linux Red Hat 9.0, ядро 2.4.21.

Заранее благодарю за ответы.


Содержание

Сообщения в этом обсуждении
"Проблемы с линковкой .so .a в C++"
Отправлено asso , 15-Авг-03 14:07 
В начале своего .h файла напиши

#ifdef __cplusplus
extern "C" {
#endif

а в конце соответственно

#ifdef __cplusplus
}
#endif