1. 前言
作為一個嵌入式開發人員,交叉編譯是必須進行的步驟。那么,如何判斷編譯生成的文件(動態庫,靜態庫,可執行程序)是否符合目標平臺的格式呢?下面分別介紹這 3 種文件的查看方式。
測試環境:
虛擬機:ubuntu 16.04
測試程序:FastDDS
2. 查看可執行程序
使用 file
命令。
file DDSHelloWorldExample
結果:
3. 查看動態庫
和可執行程序一樣,也使用 file
命令。
file libfastrtps.so.2.3.0
結果:
4. 查看靜態庫
也使用 file
命令?
file libfoonathan_memory-0.7.0.a
結果:
這個結果證明 file
命令是行不通的。那應該怎么做呢?使用 readelf
。
4.1 readelf
readelf
用于顯示 ELF 文件的信息 。我們這里使用其 -h 參數。
readelf -h libfoonathan_memory-0.7.0.a
結果( 有意外收獲 ):
從 readelf -h
的輸出結果可以看出靜態庫是符合 AArch64 平臺的。但是有多行的 Machine: AArch64 。這其實是靜態庫中 每一個.o 文件的信息。因此,我們可以使用該命令查看靜態庫中包含了哪些 .o 文件。
readelf -h libfoonathan_memory-0.7.0.a | grep "File:"
結果:
然后,我們使用命令 ar -t
命令查看上述結果是否正確。
ar -t libfoonathan_memory-0.7.0.a
結果:
5. 結語
其實,動態庫、靜態庫和可執行程序都可以使用 readelf -h
命令進行查看適用的目標平臺類型。但是查看動態庫和靜態庫的適用平臺信息時還是 file
命令方便、直觀一些。
我們可以使用 readelf
和 ar
命令查看靜態庫中包含哪些 .o 文件。如果想知道可執行程序和動態庫鏈接了哪些動態庫,該如何做呢?答案是使用 ldd 命令。請移步至這篇文章。
-
嵌入式
+關注
關注
5072文章
19026瀏覽量
303517 -
Linux
+關注
關注
87文章
11232瀏覽量
208952 -
靜態庫
+關注
關注
0文章
21瀏覽量
7423 -
Ubuntu
+關注
關注
5文章
560瀏覽量
29588 -
動態庫
+關注
關注
0文章
16瀏覽量
6219
發布評論請先 登錄
相關推薦
評論