簡體   English   中英

autoconf configure導致C std lib頭相關的編譯錯誤

[英]autoconf configure results in C std lib header related compile errors

我正在嘗試構建一個帶有automake / autoconf構建系統的項目。 這是一個很常用的項目,所以我對配置腳本,makefile或代碼的問題持懷疑態度。 它可能是某種環境,路徑,標志等問題 - 在我的最終只需使用正確的參數運行正確的命令。

配置步驟似乎以令人滿意的方式完成。 當我運行make時,我會看到一組主要是這些類型的錯誤:

error: ‘TRUE’ undeclared here (not in a function)
error: ‘struct work’ has no member named ‘version’
error: expected ‘)’ before ‘PRIu64’

讓我們關注最后一個,我花時間研究 - 我懷疑所有錯誤都與缺少定義有關。 顯然,找不到C標准庫頭文件inttypes.h中的打印友好擴展定義。 但是,在配置步驟中,聲稱所有內容都按順序排列:

configure:4930: checking for inttypes.h
configure:4930: /usr/bin/x86_64-linux-gnu-gcc -c -g -O2  conftest.c >&5
configure:4930: $? = 0
configure:4930: result: yes

如果我查看confdefs.h,config.h,config.log輸出變量等,所有INTTYPES標志都設置正確:

HAVE_INTTYPES_H='1'
#define HAVE_INTTYPES_H 1

無論是進行本機構建還是交叉編譯(對於arm-linux-gnueabihf,又名armhf),問題都是一樣的。

有問題的源.c文件確實包含了config.h,正如您所期望的那樣,根據我的理解,通過m4宏機制應該添加一個

#include <inttypes.h>

線。 是的,正如您可能傾向於問的那樣,如果我將此行輸入到.c文件中,它似乎正常工作,並且PRIu64錯誤消失了。

我不知道如何調試這類問題 - 基本上,我所知道的一切都告訴我,我已經完成了配置,但我留下了一個虛假的制作過程 除了嘗試我能找到的每個./configure調整和技巧之外,我已經開始查看自動生成的Makefile.in本身,但到目前為止還沒有。 另外看看我如何讓C預處理器告訴我它實際插入了哪些頭文件。

編輯:我已通過configure,config.log,Makefile等確認-DHAVE_CONFIG_H機制看起來不錯。

autoconf不會自動生成#include指令。 您需要基於HAVE_*宏自行完成此HAVE_* 所以你必須添加這樣的東西:

#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif

如果這些行顯示在confdefs.hconfigure腳本使用的臨時頭文件)中,這confdefs.h您的應用程序執行這些#include 如果configure將它們寫入confdefs.h ,這僅僅是為了其他configure測試的好處,而不是為了應用程序使用。

首先,為失敗的目標運行make -n 這可能是一些.o文件; 你可能需要一些調整來正確地獲得它的路徑。

現在您擁有用於編譯文件的命令。 如果通過調試此命令沒有找到問題,請嘗試運行它,添加-E以強制預處理器輸出文本而不是調用編譯器。

請注意,現在.o文件將是文本,您必須在不使用-E情況下重建它。

您可能會發現一些預處理程序標志可用於獲取更多詳細信息: -dM-dD或其他。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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