Связывание скомпилированной статической библиотеки C с программой C ++

Я попытался связать статическую библиотеку (скомпилированную с gcc) с программой на c ++, и я получил «неопределенную ссылку». Я использовал gcc и g ++ версии 4.6.3 на сервере с Ubuntu 12.04. Например, вот простой файл библиотеки для факториального метода:

mylib.h

#ifndef __MYLIB_H_
#define __MYLIB_H_

int factorial(int n);

#endif

mylib.c

#include "mylib.h"

int factorial(int n)
{
    return ((n>=1)?(n*factorial(n-1)):1);
}

Я создал объект для этого mylib.c, используя gcc:

gcc -o mylib.o -c mylib.c

Снова статическая библиотека была создана из объектного файла с помощью утилиты AR:

ar -cvq libfact.a mylib.o

Я протестировал эту библиотеку с помощью программы на C (test.c) и программы на C ++ (test.cpp)

Программы на C и C ++ имеют одинаковое тело:

#include "mylib.h"
int main()
{
    int fact = factorial(5);
    return 0;
}

Предполагая, что статическая библиотека libfact.a находится в каталоге / home / test, я без проблем скомпилировал свою программу на C:

gcc test.c -L/home/test -lfact

Однако во время тестирования программы на C ++ она выдала ошибку ссылки:

g++ test.cpp -L/home/test -lfact

test.cpp:(.text+0x2f): undefined reference to `factorial(int)'
collect2: ld returned 1 exit status

Я даже попытался добавить команду extern в test.cpp:

extern int factorial(int n) //added just before the main () function

Все та же ошибка.

Может кто-нибудь сказать мне, что я здесь не так?Что я пропустил при создании статической библиотеки?Должен ли я добавить что-нибудь в мойtest.cpp заставить это работать?

Ответы на вопрос(2)

Ваш ответ на вопрос