LINUX.ORG.RU

Undefined reference в CPP файле, но всё хорошо с C

 , linkage


1

2

Всем привет. Я в ступоре. Есть библиотека libnield.a, есть cpp файл, который зовёт оттуда одну функцию init_nield. При линковке выскакивает ошибка:

netmon.cpp:(.text+0x44): undefined reference to `init_nield(int, char**, nield_cbs*)'

Всё было бы понятно, но:

$ nm ../../../../libnield_prefix/lib/libnield.a |grep init_nield
0000000000000b20 T init_nield
$ grep init_nield ../../../../../3rdparty/nield/src/nield.c 
void init_nield(int argc, char **argv, struct nield_cbs* callbacks)

А самое замечательное то, что если переименовать файл netmon.cpp в netmon.c и использовать не g++, а gcc, то всё линкуется нормально. В чём могут быть различия в линковке сишного и плюсового файла, которые выливаются в такие последствия?

☆☆☆☆☆

extern «C» <func_decl>

x0r ★★★★★
()

объявление init_nield в заголовочнике завёрнутов в

#ifdef __cplusplus
extern "C" {
#endif

... тут объявления функций

#ifdef __cplusplus
}
#endif

?

Если нет, то заверни. Или включай заголовочник в cpp файл вот так:

extern "C" {
#include <libnield.h>
}
Harald ★★★★★
()
Ответ на: комментарий от Harald

thnx, туплю утром =) extern «C» помог.

DELIRIUM ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.