2015-01-08 3 views
0

Я пытаюсь вызвать функцию C++ из функции C, и я вижу неопределенную ссылку на написанную функцию .cc-файл. Ниже приведен код. Что мне не хватает?Неопределенная ссылка для функции C++ при вызове из функции C

externcpp.cc

#include <iostream> 
#include "example.h" 
using namespace std; 
int main() 
{ 
    cout << "I am " << __func__ << "In File " << __FILE__; 
    return 0; 
} 
void example_fun() 
{ 
    cout << "I am" << __func__ << "in File __FILE__"; 
} 

externc.c

#include <stdio.h> 
#include "example.h" 
int test1() 
{ 
    printf(" I am [%s] and from File [%s]\n",__func__,__FILE__); 
    printf("Calling C++ Function from C\n"); 
    example_fun(); 
    return 0; 
} 

example.h

#ifndef EXAMPLE_H 
#define EXAMPLE_H 

#ifdef __cpluscplus 
#define EXTERNC extern "C" 
#else 
#define EXTERNC 
#endif 

EXTERNC void example_fun(); 
#endif 

и использовали следующие команды для компиляции и компоновки

g++ -c -o externcpp.o externcpp.cc -Wall 
gcc -c -o externc.o externc.c -Wall 
g++ -o output externcpp.o externc.o 

С уважением,

+0

Пожалуйста, сообщите об этом ошибке. – user1766169

+0

Почему существует завершающий '' '' '' на '#define EXTERNC'? Кажется, он никогда не закрывается. –

+0

externc.o: В функции 'test1' externc.c: (.text + 0x2d): undefined ссылка на 'example_fun' collect2: error: ld return 1 status status – user3631987

ответ

9

Это должно быть #ifdef __cplusplus, не #ifdef __cpluscplus как в коде выше. Проверить написание.

+2

Ew, это ошибки, на которые вы можете смотреть часами, не видя их. Хороший улов! –

+2

Да, это была ошибка после внесения этого изменения, и я получил необходимый результат благодаря всем. Спасибо @AndreyT – user3631987

Смежные вопросы