簡體   English   中英

gcc 編譯 ELF 文件時搜索列表錯誤

[英]gcc compiles ELF file with wrong search list

編譯 gcc 並使用它編譯一個簡單的 c 程序后:

echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
grep -B4 '^ /usr/include' dummy.log

結果是:

ignoring nonexistent directory "/tools/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../x86_64-pc-linux-gnu/include"
ignoring duplicate directory "/tools/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include

但根據Linux From Scratch guide 9.1 第 6.25 節“驗證編譯器是否正在搜索正確的 header 文件:”預計會出現以下情況(忽略 *linux-gnu 路徑...):

#include <...> search starts here:
 /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include
 /usr/local/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include-fixed
 /usr/include

更糟糕的是

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

是:

SEARCH_DIR("/usr/lib");

但應該是:

SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");

我嘗試將所有路徑添加到 /etc/ld.so.conf 並重新編譯 gcc pass 2,但沒有任何改變。

那么究竟是什么決定了 ELF 文件中的 SEARCH_DIR 條目呢?

EDIT1:我回溯並發現上一步 make -k clean 沒有完成,因為它缺少 autogen,這似乎在 LFS 指南 9.1 中根本沒有涵蓋。

我重新啟動了 LFS 9.1 並更加小心地按照說明進行操作,現在 output 符合預期!

我做了兩件事不同:

  1. 在我的第一次嘗試中,我忽略了第 5 章中關於在每個部分之后刪除提取的 tarball 的建議:

對於每個 package:

  1. 使用 tar 程序,解壓要構建的 package。 在第 5 章中,確保您在提取 package 時是 lfs 用戶。

  2. 切換到解壓 package 時創建的目錄。

  3. 按照書中的說明構建 package。

  4. 切換回源目錄。

  5. 除非另有說明,否則刪除提取的源目錄。

  1. 當我重新安裝主機操作系統時,我沒有使用lfs作為第一個用戶創建它。 相反,我使用lfshost用戶創建它,並按照第 4.3 節所述創建用戶lfs

暫無
暫無

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

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