Łączenie skompilowanej biblioteki statycznej C z programem C ++

Próbowałem połączyć statyczną bibliotekę (skompilowaną z gcc) z programem c ++ i otrzymałem „niezdefiniowane odwołanie”. Użyłem gcc i g ++ w wersji 4.6.3 na komputerze z serwerem ubuntu 12.04. Na przykład tutaj znajduje się prosty plik biblioteki dla metody czynnikowej:

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);
}

Stworzyłem obiekt dla tego mylib.c za pomocą gcc:

gcc -o mylib.o -c mylib.c

Ponownie statyczna biblioteka została utworzona z pliku obiektowego przy użyciu narzędzia AR:

ar -cvq libfact.a mylib.o

Przetestowałem tę bibliotekę za pomocą programu C (test.c) i programu C ++ (test.cpp)

Zarówno program C, jak i C ++ mają to samo ciało:

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

Zakładając, że biblioteka statyczna libfact.a jest dostępna w katalogu / home / test, skompilowałem mój program C bez żadnych problemów:

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

Jednak podczas testowania programu C ++ rzucił błąd łącza:

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

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

Próbowałem nawet dodać polecenie extern w test.cpp:

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

Wciąż ten sam błąd.

Czy ktoś może mi powiedzieć, co się tutaj mylę?Czy czegoś brakowało podczas tworzenia statycznej biblioteki?Czy muszę dodawać coś w moimtest.cpp aby to działało?

questionAnswers(2)

yourAnswerToTheQuestion