⑴ GCC問題,怎麼我沒有找到UDF.h這個庫文件
如1、頭文件<\路徑\udf.h>
2、編譯中加「I」就可以編譯了。
⑵ 為什麼GCC、GLIBC、libstdc++ not found
GLIBCXX not found
相關報錯處理方式:
1. 需要確認所使用的庫文件是否存在於系統中,通常通過運行 `ldd` 命令查看程序依賴的動態庫。如果出現類似`/usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found (required by ./xxx)`的錯誤信息,說明缺少特定版本的GLIBCXX庫。
處理方法如下:
2. **源碼編譯更新gcc**
3. **下載官方包復制**
4. **手動編譯復制**
GLIBC not found
相關錯誤信息示例:
若報錯信息為`/lib64/libc.so.6: version 'GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)`,則表明缺少特定版本的GLIBC庫。
處理方法有以下幾種:
2. **源碼編譯更新gcc**
3. **下載官方包復制**
4. **手動編譯復制**
gcc
gcc 是 GNU Compiler Collection 的簡稱,用於將c/c++源代碼編譯為不同操作系統平台的匯編代碼和可執行程序。
gcc 是一組編譯工具的集合,主要負責預處理和編譯任務,自動調用匯編器和鏈接器,提供與編譯器緊密相關的運行庫支持。
glibc
glibc 是 GNU 實現的標准 C 庫,提供操作系統級的底層函數和核心API,如I/O設備操作。
glibc 包含多個頭文件,每個文件定義一組相關設施。
libstdc++
libstdc++ 類似於 glibc,但針對 C++ 標准庫。
提供與標准 C 庫相同的核心定義和底層功能,以及 C++ 標准庫的實現,用於實現 C++ 程序中的庫內容,如線程、流、文件、輸入/輸出等。
大多數 linux 發行版默認使用 libstdc++。
ABI
標准庫的一個關鍵方面是 Application Binary Interface (ABI),它確保了編寫的 C 程序能在不同版本的 glibc 上運行。
為了改進而不破壞兼容性,glibc 使用符號版本控制,每個函數與特定版本關聯,允許新版本的程序使用新符號,而舊版本的程序仍能使用舊但兼容的符號。
binutils 是將匯編語言翻譯為目標代碼的程序,與標准庫之間存在密切關系。
GNU C 函數庫為開發者提供了便利,便於使用 C 語言開發基於 Linux 操作系統的程序。
glibc 是 Linux 下的 C 標准庫實現,是 GNU C Library 的一部分,已成為 Linux 的主要 C 庫之一。
相關命令
使用 `ldd` 命令查看程序依賴的動態庫。
通過 `strings /lib64/libc.so.6 | grep GLIBC_` 查看系統 GLIBC 支持的版本。
通過 `strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX` 查看系統 GLIBCXX 支持的版本。
使用 `readelf` 命令可以檢查應用程序或庫所需的 GLIBC 或 GLIBCXX 版本。
⑶ gcc交叉編譯怎麼找頭文件及lib庫的
是在specs裡面讀取的路徑信息。
命令行中鍵入 gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --ver
bose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libe
xecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-langu
ages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --
enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-
awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-thre
ads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptio
ns --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
注意「--prefix=/usr」 以及「--libdir=/usr/lib 」
表示gcc ld as 等可執行文件安裝在/usr/bin,而libc.a 等文件是在/usr/lib中。
解壓縮交叉編譯器時,也是要解壓縮在在--prefix 指定的目錄下。
比如 下載了arm-linux 的交叉編譯器cross-3.3.2.tar.bz2,解壓縮之後,運行 arm-linux-gcc -v
得到 --prefix=/usr/local/arm。那麼就要把 bin lib 等所有的文件和文件夾到/usr/local/arm目錄下。
否則到時候運行arm-linux-gcc hello.c會提示找不到stdio.h 或者 lib.so.6 等
HOWTO Use the GCC specs file
About Specs file
The "gcc" program invoked by users is a convenient front-end driver executable which will invoke other programs in the background such as cc1, as or ld to do its work according to the command line parameter given. A specs file is plain text used to control the default behavior for the "gcc" front-end. The specs file is usually built-in but for flexibility purposes, it can be overridden with an external version.
Basic Specs file modifications
CC will proce a specs file via the following command.
gcc -mpspecs > specs
You may use a text editor of your choice to inspect it. It may be confusing at first, but there are many places of interest. To use the specs file, invoke gcc with -specs= or place it at "/mingw/lib/gcc/mingw32//specs" to make GCC use it by default, where refers to the GCC version installed.
Adding include directories to the search path
& #160;he *cpp: section should be modified. It contains the following by default:
*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}
If "z:\libx\include" needs to be added to the GCC includes search path, it should be changed to the following
*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} -I/z/libx/include
Adding lib directories to the search path
& #160;he *link_libgcc: section should be modified. It contains the following by default:
*link_libgcc:
%D
& #160;f "z:\libx\lib" needs to be added to the GCC library search path, it should be changed to the following
*link_libgcc:
%D -L/z/libx/lib
⑷ Linux下編譯.c文件時sqlite3找不到庫文件如何解決(undefined reference to `sqlite3_open')
建議最好寫個makefile,包含上庫段告陵文件
動態的路徑一般是/usr/lib/握戚
靜態庫一般可能是安友氏裝目錄
可以試試rmp -q
或者find / -name
sqlite3