Tôi đang cố gắng biên dịch một tệp thực thi (tệp ELF) không sử dụng bộ tải động. Tôi xây dựng một trình biên dịch chéo biên dịch mips từ Linux để được sử dụng trên một giả lập tôi đã thực hiện. Tôi đã khẳng định cờ -static-libgcc trong việc biên soạn tệp hello.cpp của tôi (chương trình hello world). Rõ ràng điều này là không đủ mặc dù. Bởi vì vẫn còn một phân đoạn trong tệp thực thi của tôi có chứa tên/đường dẫn của trình tải động. Tôi sử dụng những cờ nào để tạo một tệp thực thi chứa mọi thứ cần thiết để chạy? Tôi có cần phải xây dựng lại trình biên dịch chéo của mình không?Biên dịch một Static Static Executable
Trả lời
Thử sử dụng cờ -static
?
Sử dụng các cờ sau để liên kết
-static -static-libgcc -static-libstdc++
Dùng ba lá cờ để liên kết chống lại các phiên bản tĩnh của tất cả phụ thuộc (giả sử gcc). Lưu ý rằng, trong một số trường hợp nhất định bạn không nhất thiết cần cả ba lá cờ, nhưng chúng cũng không bị "tổn thương". Vì vậy, chỉ cần bật cả ba.
Kiểm tra nếu nó thực sự làm việc
Hãy chắc chắn rằng đó thực sự là không có mối liên hệ năng động
ldd yourexecutable
nên trở về "không phải là một động thực thi" hoặc một cái gì đó tương đương.
Hãy chắc chắn rằng không có những biểu tượng chưa được giải quyết trái
nm yourexecutable | grep " U "
Danh sách này nên được bỏ trống hoặc chỉ nên chứa một số biểu tượng hạt nhân không gian đặc biệt như
U __tls_get_addr
Cuối cùng, kiểm tra xem bạn thực sự có thể thực thi tệp thực thi của bạn
Đây phải là câu trả lời được chấp nhận! –
- 1. Java static static Workaround
- 2. Coffeescript Static Analysis/Static Typechecking - Roadblock
- 3. Static Finalizer
- 4. static :: staticFunctionName()
- 5. static NSMutableDictionary
- 6. Sự khác nhau giữa static final và static final
- 7. static vs extern "C"/"C++"
- 8. Java: `Phương pháp static`
- 9. Eager static constructor
- 10. static AlarmManager trong Android
- 11. ConfigurationManager & Static Class
- 12. VB.NET Static Code Anaylsis
- 13. Static vs dynamic sql
- 14. Django heroku static dir
- 15. tùy chọn -static cho gcc?
- 16. backtrace_symbols() với cả hai -static và -rdynamic
- 17. findViewById bên trong một Static Method
- 18. Popover segue đến static cell UITableView gây ra lỗi biên dịch
- 19. kiểm tra xem nhị phân có được biên dịch bằng "-static"
- 20. mô-đun php không biên dịch. Không nhận ra "static function_entry"
- 21. Private Static Readonly Field Capitalization
- 22. F # Static Member Type Constraints
- 23. static final serialVersionUID dài = 1L
- 24. Flask static file Cache-Control
- 25. C++ private inheritance và static members/types
- 26. public static vs static public - có sự khác biệt nào không?
- 27. cách liên kết với lib động (.so) và static libc.a
- 28. Khi sử dụng static string vs #define
- 29. symfony2 tạo static html với twig
- 30. Java - sử dụng AtomicInteger vs Static int
Có tài nguyên hay không mô tả ing kết quả chính xác của mỗi cờ gcc? Tôi không chắc chắn 100% liệu tôi có thực sự vô hiệu hóa tải động hay không. Khi tôi sử dụng -static tôi vẫn có tên của một bộ tải động được đặt vào phần .interp của tôi trong tập tin elf. –
http://gcc.gnu.org/onlinedocs/gcc/Option-Index.html Tôi đã từng viết một hệ điều hành tải các tệp thi hành elf và tôi có thể xác nhận rằng cờ có hoạt động, chỉ cần bỏ qua các công cụ liên quan đến ld và nhảy trực tiếp đến điểm vào của tập tin thực thi – Tomaka17
Tôi đã đọc một số điều về cách sử dụng một số tùy chọn cấu hình "-disable-shared". Điều này có cần thiết để biên dịch một tệp thực thi độc lập không? –