Tôi mới sử dụng chương trình Linux và đang cố gắng sử dụng thư viện BFD. Đây là mã hiện tại tôi đang cố gắng để biên dịch:Lỗi biên dịch bằng bfd.h trên Linux
#include <bfd.h>
#include <stdlib.h>
bfd *abfd;
int main() {
bfd_init();
abfd = bfd_openr("/home/mike/Desktop/testFunc/testProg", NULL);
return 0;
}
Tôi đang sử dụng dòng lệnh sau đây để soạn thảo:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo
Và đang nhận được các lỗi sau đây:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo /usr/lib/libbfd.a(elflink.o): Trong hàm
elf_link_add_object_symbols': /build/buildd/binutils-2.21.53.20110810/builddir-single/bfd/../../bfd/elflink.c:4605: undefined reference to
objalloc_free_block ' /build/build d/binutils-2.21.53.20110810/builddir-single/bfd /../../ bfd/elflink.c: 4892: tham chiếu không xác định đến_sch_istable' /usr/lib/libbfd.a(elflink.o): In function
bfd_elf_size_dynamic_sections ': /build/buildd/binutils-2.21.53.20110810/builddir- đơn/BFD /../../ BFD/elflink.c: 6048: tài liệu tham khảo không xác định đểlbasename' undefined reference to
_sch_istable' collect2: ld trở về 1 lối tình trạng thực hiện: * [tất cả] Lỗi 1
Có có nhiều dòng lỗi hơn, bạn có thể xem here. Tôi chắc rằng có một lời giải thích đơn giản cho điều này nhưng nó đã khiến tôi bối rối trong một thời gian.
Để tóm tắt những gì tôi đã làm cho đến nay:
- cài đặt sạch sẽ xây dựng của Ubuntu
- gói cài đặt binutils-dev
Tôi đã không nhận ra rằng những gì tôi đã làm được liên kết tĩnh. Có một lý do tại sao liên kết tĩnh sẽ gây ra những lỗi này mặc dù? –
'/ usr/lib/libbfd.so' phụ thuộc vào các thư viện động khác cho một số chức năng của nó - vì vậy phiên bản' .a' tĩnh cũng sẽ yêu cầu các thư viện tĩnh khác khi liên kết tệp thực thi cuối cùng của bạn. Tôi đang gặp khó khăn trong việc tìm ra cách để xây dựng nó tĩnh mặc dù. – sarnold
Được rồi. Sẽ chấp nhận câu trả lời này vì nó sửa chữa vấn đề ngay lập tức nhưng nếu bạn sẽ rất biết ơn nếu cuối cùng bạn tìm thấy cách biên dịch tĩnh một cách chính xác quá :) –