簡體   English   中英

GCC 可以警告庫中未定義的函數嗎?

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

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