Łą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?