2010-01-07 17 views
8

Tất cả các thư viện được chia sẻ chuẩn trên hệ thống Linux của tôi (Fedora 9) chỉ định ELFOSABI_NONE (0) làm OSABI của chúng.Tại sao tiêu đề ELF của một thư viện được chia sẻ chỉ định Linux là OSABI?

Điều này là tốt - tuy nhiên tôi đã nhận được thư viện được chia sẻ từ nhà cung cấp nơi OSABI được cung cấp trong tiêu đề ELF là ELFOSABI_LINUX (3).

Điều này không âm thanh như giá trị không hợp lý cho thư viện được chia sẻ dành cho hệ thống Linux, tuy nhiên giá trị khác với thư viện khác của tôi - và khi tôi cố gắng mở thư viện này dlopen(), từ một trong các thư viện khác của tôi không thành công với lỗi "ELF file OS ABI invalid".

Tôi đã biên soạn tiện ích FreeBSD brandelf.c và sử dụng nó để thay đổi loại OSABI thành 0 và bây giờ thư viện có vẻ như để chơi tốt với mọi thứ khác.

Tôi chỉ tự hỏi - tại sao bạn cho rằng thư viện này được đánh dấu là ELFOSABI_LINUX? Tôi đoán có lẽ họ vượt biên dịch trên một hệ thống khác và chỉ định một số cờ gcc gây ra giá trị này được đặt vào tiêu đề ELF? Tôi đã cố gắng để đạt được một cái gì đó tương tự nhưng không thể xác định cờ gcc hoặc cờ thích hợp.

Tôi muốn biết nguyên nhân có thể là vì nhà cung cấp cụ thể này sẽ không làm bất cứ điều gì mà không cần nắm tay nhiều và tôi muốn nói "có thể bạn đang làm X nhưng điều này có nghĩa là chúng tôi có để sửa đổi thư viện của bạn sau khi chúng tôi phân phối chúng ".

Trả lời

4

Có thể nhà cung cấp đang biên soạn chéo trên FreeBSD hoặc sử dụng hệ thống Fedora gần đây, nơi mọi thứ sử dụng STT_GNU_IFUNC sẽ được đánh dấu là ELFOSABI_LINUX. Nếu bạn đang cố gắng sử dụng nó trên Linux thì sẽ không có vấn đề gì khi thay đổi nó thành ELFOSABI_NONE như bạn đã làm.

Các vấn đề liên quan