2017-02-03 22 views
0

我想用MinGW建立一個靜態庫。從靜態庫中未定義的函數

一切都很好,直到我試圖使用庫,並得到一個錯誤,說add_numbers是一個未定義的函數。

很多其他人都遇到過這個問題,並且在源文件包含後移動它們的庫進行鏈接以將它們整理出來,但這是我編寫批處理文件的方式,因此沒有多大幫助。

這是我的來源。

mylib.h

#ifndef MYLIB_H 
#define MYLIB_H 
int add_numbers(int a, int b, int c); 
#endif 

mylib.c 的#include 「mylib.h」 INT add_numbers(INT A,INT B,INT C) { 返回A + B + C; }

我建設使用下列命令我某文件

GCC --std = C89 -c mylib.c -o mylib.o

AR RCS libmylib.a添加mylib.o

我也試過用指定的標準。 運行此命令時沒有錯誤或警告。

接下來,我的測試程序看起來像這樣。

#include <stdio.h> 
#include "mylib.h" 
int main() 
{ 
printf("The sum of 1, 2, and 3 is %d", add_numbers(1, 2, 3)); 
getchar(); 
return 0; 
} 

最後,我們用這個命令來構建測試。 GCC mylibtest.c -L -lmylib -o TEST.EXE

我試着走動的那些命令成許多許多不同的序列,但總是在接收到以下錯誤:

C:\用戶\亞倫\應用程序數據\本地的\ Temp \ cc0ERpBi.o:mylibtest.c :(文字+ 0×26):未定義 參考`add_numbers' collect2.exe:錯誤:LD返回1退出狀態

E:\ my_first_static_library>

任何幫助將非常感激,我已閱讀我可以找到的每個教程寫靜態庫的藝術,以及一個很好的十個stackoverflow問題。

+0

yugr有你的答案。你有'-L'而不是'-L.',所以鏈接器發現'-L'的參數是'-lmylib', ,即'-lmylib'是你想要鏈接器的目錄的名字 搜索庫,因此*不*發現 ,你實際上是鏈接任何庫。因此未定義 引用您的庫函數。 –

回答

1

-L後缺少一個點:

gcc mylibtest.c -L . -lmylib -o test.exe 
相關問題