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