Связывание скомпилированной статической библиотеки 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
заставить это работать?