我試圖將靜態庫(使用gcc編譯)鏈接到C++程序,並得到'未定義引用'。我在Ubuntu 12.04服務器機器上使用了gcc和g ++版本4.6.3。例如,這裏是因法簡單的庫文件:將C編譯靜態庫鏈接到C++程序
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
我甚至試圖在TEST.CPP添加的extern命令:
extern int factorial(int n) //added just before the main() function
還是一樣的錯誤。
- 有人能告訴我我在這裏錯了嗎?
- 創建靜態庫時是否有任何我錯過的東西?
- 我必須在我的
test.cpp
中添加任何東西才能使其工作?
當我看到SO問題沒有upvote,還有一個7-upvoted的答案時,我完全理解愚蠢的人類是多麼的愚蠢。如果問題不是這樣的話,答案如何相關?來吧! –