簡體   English   中英

為什么共享庫的ELF標頭將Linux指定為OSABI?

[英]Why would the ELF header of a shared library specify Linux as the OSABI?

Linux系統(Fedora 9)上的所有標准共享庫都將ELFOSABI_NONE(0)指定為其OSABI。

很好-但是我從供應商那里收到了一個共享庫,其中ELF標頭中給出的OSABI是ELFOSABI_LINUX(3)。

對於一個供Linux系統使用的共享庫,這聽起來不算是一個不合理的值,但是它與我所有其他庫的值都不一樣-因此,當我嘗試使用dlopen()從一個庫中打開該庫時我的其他庫中的這將失敗,並顯示錯誤“ ELF文件OS ABI無效”。

我編譯了FreeBSD實用程序brandelf.c,並使用它將OSABI類型更改為0,現在該庫似乎可以與其他所有功能配合使用。

我只是想知道-您為什么認為該庫被標記為ELFOSABI_LINUX? 我猜想也許他們在另一個系統上交叉編譯並指定了一些導致該值設置為ELF標頭的gcc標志? 我試圖達到類似的目的,但是無法確定適當的gcc標志。

我想知道可能的原因,因為這個特定的供應商如果沒有很多手將不做任何事情,並且我想說“您可能正在執行X,但這意味着我們必須修改您的庫在我們將它們取走之后”。

供應商可能在FreeBSD上交叉編譯,或者正在使用最新的Fedora系統進行交叉編譯,其中使用STT_GNU_IFUNC的所有內容都將被標記為ELFOSABI_LINUX。 如果您嘗試在Linux上使用它,就像您將其更改為ELFOSABI_NONE一樣,應該沒有問題。

暫無
暫無

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

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