Tôi cố gắng làm cho các chức năng trong ngôn ngữ lắp ráp và đặt chúng trong một thư viện động vì vậy tôi tạo .o với .S với lệnh này:
nasm -f elf64 hello.S -o hello.o
nhưng khi tôi muốn tạo lib với gcc:
gcc -fPIC -shared hello.o -o libasm.so
và nó sẽ hiển thị cho tôi lỗi này:
/usr/bin/ld: hello.o: relocation R_X86_64_PC32 against undefined symbol [email protected]@GLIBC_2.2.5 can not be used when making a shared object; recompile with -fPIC
Compile error: di dời R_X86_64_PC32 đối với ký hiệu không xác định
6
A
Trả lời
4
Từ http://www.nasm.us/xdoc/2.10rc8/html/nasmdoc9.html#section-9.2.5:
To call an external routine, you must use another special PIC relocation type, WRT ..plt. This is much easier than the GOT-based ones: you simply replace calls such as CALL printf with the PLT-relative version CALL printf WRT ..plt.
nên thay vì
; ...
call printf
sử dụng
; ...
call printf WRT ..plt
và biên dịch và liên kết như bình thường.
Các vấn đề liên quan
- 1. u-boot: Di dời
- 2. tải lại thời gian ELF di dời
- 3. Ký hiệu không xác định "vtable cho ..." và "typeinfo for ..."?
- 4. di dời động của mã phần
- 5. Ký hiệu không xác định cho kiến trúc armv7: "_SCNetworkReachabilityCreateWithAddress"
- 6. Lỗi GCC này "... di dời cắt ngắn để phù hợp ..." có nghĩa là gì?
- 7. Compile thời gian thẩm định
- 8. Ký hiệu không xác định cho kiến trúc i386:
- 9. Vấn đề với Makefile đơn giản: tham chiếu không xác định đến ký hiệu 'cos @@ GLIBC_2.2.5'
- 10. Ký hiệu không xác định cho hàm constexpr
- 11. Khái niệm di dời có nghĩa là gì?
- 12. Mac PackageMaker - Cho phép di dời vấn đề
- 13. Ký hiệu không xác định đối với lỗi kiến trúc x86_64 khi liên kết OpenCV trong Xcode
- 14. Mysql ERROR tại dòng 1153: Lệnh không xác định '\'
- 15. Ký hiệu xác suất
- 16. (.text + 0x20): tham chiếu không xác định đối với tham chiếu `chính 'và không xác định đối với hàm
- 17. Fatal error: Call to openssl_random_pseudo_bytes chức năng không xác định()
- 18. CakePHP - Fatal error: Lệnh gọi hàm không xác định
- 19. Compile error " 'struct' loại định nghĩa lại" mặc dù nó là định nghĩa đầu tiên cho nó
- 20. Lệnh trình liên kết không thành công với các ký hiệu Không xác định cho kiến trúc i386
- 21. không thể đọc thuộc tính 'toUpperCase' không xác định với ERROR trên * ngFor
- 22. vim/macvim: xác định vị trí một phương thức/ký hiệu được xác định
- 23. Compile vấn đề với curlpp: tài liệu tham khảo không xác định đến biểu tượng 'curl_easy_setopt @@ CURL_OPENSSL_3'
- 24. Ký hiệu không xác định cho kiến trúc armv7 khi thêm CocoaAsyncSocket
- 25. Lỗi Qt: tham chiếu không xác định đối với 'gluOrtho2D'
- 26. tham chiếu không xác định đối với `__imp_WSACleanup '
- 27. C++ Qt: tham chiếu không xác định đối với `_imp___ZN12QApplicationC1ERiPPci '
- 28. Ký hiệu không xác định cho kiến trúc i386 khi cố gắng biên dịch AFNetworking 2.0
- 29. Ký hiệu không xác định cho kiến trúc armv7 sau khi nhập RNCryptor
- 30. Tại sao các chức năng tĩnh loại bỏ các ký hiệu không xác định trong Xcode?
Xem http://www.nasm.us/xdoc/2.10rc8/html/nasmdoc9.html#section-9.2.5 (_Hủy thủ tục bên ngoài thư viện_) – Michael