[英]Can GCC warn about undefined functions in libraries?
考慮以下測試項目:
test.h
:
#ifndef TEST_H
#define TEST_H
void test1(int);
void test2(int);
#endif /* TEST_H */
text.c
:
#include "test.h"
void test1(int x) { (void) x; }
糟糕,我忘了定義test2()
! 當我這樣做時,我想要某種反饋,最好是拒絕編譯,盡管至少有一個警告會很好。 然而 GCC 10.2 (在 Ubuntu 20.10 上)編譯它沒有警告:
gcc -Wall -Wextra -Wpedantic -std=c11 -o libtest.o -c test.c
我想我明白為什么:如果test2()
實際上是來自另一個庫,也許是系統庫怎么辦? 讓它成為最終將所有內容鏈接到可執行文件的程序的問題。 但我想在那之前知道它,在這種情況下。 它沒有在任何包含的 header 文件中聲明。 它沒有在任何地方調用嗎? 可以檢測到嗎?
我試過了:
--no-undefined
導致gcc: error: unrecognized command-line option '--no-undefined'; did you mean '-Wno-undef'?
gcc: error: unrecognized command-line option '--no-undefined'; did you mean '-Wno-undef'?
-Wno-undef
- 接受但沒有警告-z,defs
- 接受但沒有警告-Wimplicit-function-declaration
- 接受但沒有警告-Werror=missing-declarations
- 我知道這是相反的情況,但我越來越絕望。這是不可能的,因為在組裝 static 庫的階段沒有執行鏈接。
我建議為您的圖書館准備一個“測試容器”。 設置您的構建系統以在您構建庫的任何時候構建測試可執行文件。 它甚至可能只是與庫源位於同一目錄中的單個.c
文件,但顯然不在作為庫一部分的對象列表中。
測試可執行文件調用您希望作為庫入口點的所有函數。
為了在發布之前測試庫的功能,您可能無論如何都應該這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.