簡體   English   中英

對通過靜態庫調用的同一.c文件中定義的函數的未定義引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM