[英]Undefined reference to Function defined in same .c file invoked through static library
該靜態C庫(libabc.a)鏈接到C ++程序。
在我的qmake專業版文件中,我使用了
LIBS += pathToLib/libabc.a
創建靜態庫時,我沒有任何問題。 當使用qmake和gmake編譯並運行cpp應用程序時,創建了其他cpp文件的目標文件,但出現以下錯誤:
../abc/libabc.a(mdl.o): In function 'SetExt': abc/src/mdl.c:2186: undefined reference to 'func1'
在mdl.c中,聲明和定義都存在。
靜態無效的func1(int *,char *,char *);
靜態void func1(int * m,char * p,char * s)
{
.....
}
該函數的函數調用位於C文件mdl.c中。 創建靜態庫(使用gcc和ar)時,我是否犯了一個錯誤? 還是我錯過了什么?
您將函數聲明為
static void func1(int *, char *, char *);
根據6.2.2標識符的鏈接 , C標准的第3段:
如果對象或函數的文件作用域標識符的聲明包含存儲類說明符
static
,則該標識符具有內部鏈接。
因此,無法從編譯單元外部訪問func1()
,只能在其所在的源文件中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.