Trong GCC, tôi có thể sử dụng cờ liên kết -Wl,--start-group
và -Wl,--end-group
để giải quyết các sự cố liên kết với thư viện có phụ thuộc vòng tròn. Tôi muốn làm điều tương tự với tiếng kêu vang, nhưng có vẻ như tính năng này là dropped in lld version 3.2. Tôi phải làm nó như thế nào?Liên kết các thư viện tĩnh với clang độc lập theo thứ tự
Trả lời
Các release notes của LLVM 3.2 trạng thái đó
llvm-ld và llvm-sơ khai đã được loại bỏ, chức năng llvm-ld có thể được thay thế một phần bởi llvm-link | opt | {llc | as, llc -filetype = obj} | ld, hoặc được thay thế hoàn toàn bởi Clang.
Theo mặc định, tiếng kêu dường như sử dụng trình liên kết hệ thống. Đó là trên Linux ví dụ nó sử dụng ld GNU:
$ clang --version
clang version 3.2 (branches/release_32 170558)
...
$ clang -Wl,--verbose
GNU ld (GNU Binutils; devel:gcc/openSUSE_12.3) 2.24.0.20140403-196
...
Điều này cho thấy rằng bạn có thể sử dụng -Wl, - khởi động nhóm và -Wl, - cuối cùng nhóm như với GCC.
Đây là trường hợp. Công cụ ld của Apple không hỗ trợ các cờ --start-group, nhưng nó cũng không quan tâm đến các phụ thuộc vòng tròn. – Mokosha
Tôi không phải là người hâm mộ phụ thuộc vòng tròn :) nhưng here một số người cho biết họ xử lý các trường hợp này bằng cách liên kết một số thư viện hai lần. Tôi đã không thử nó nhưng điều này có thể làm tăng dấu chân của mã của bạn.
$(CC) -o myApp -lfoo -lbar -lfoo
Tôi không biết điều này có hiệu quả với tiếng kêu hay không nhưng nó có thể đáng để chụp.
Giải pháp tốt nhất sẽ loại bỏ phụ thuộc vòng tròn vì nó sẽ tạo ra cho bạn nhiều vấn đề hơn trong tương lai.
Không bao giờ nên tăng kích thước mã :) – mlvljr
Tôi đã gặp sự cố tương tự liên kết với trình biên dịch tùy chỉnh bằng cách sử dụng dự án QT C++.
Vấn đề hóa ra là QT sử dụng clang (c compiler) hơn là clang ++ (C++ compiler). Bằng cách định nghĩa trình biên dịch như clang ++ thay vì clang trong dự án QT (thiết lập QMAKE_CXX = clang ++), dự án được liên kết thành công.
Như tôi đã hiểu, điều này cũng đúng với gcc và g ++.
- 1. Liên kết tĩnh các thư viện SDL2
- 2. Liên kết thư viện được chia sẻ với thư viện tĩnh: thư viện tĩnh có được biên dịch khác với một ứng dụng đang liên kết nó không?
- 3. VS2010: Liên kết trong một thư viện tĩnh tĩnh
- 4. Các thư viện liên kết tĩnh trong MinGW
- 5. Liên kết các thư viện tĩnh, chia sẻ một thư viện tĩnh khác
- 6. Liên kết LLVM JIT Mã với Thư viện LLVM tĩnh?
- 7. Làm thế nào để thực hiện theo thứ tự liên kết khi liên kết với thư viện tĩnh với gnu-make?
- 8. Kết hợp các thư viện tĩnh
- 9. Liên kết nhị phân với thư viện tĩnh trong xcconfig
- 10. linux g ++ liên kết 64 bit mã thư viện chia sẻ với thư viện tĩnh
- 11. liên kết với thư viện tĩnh 0MQ trong VS
- 12. cách liên kết thư viện tĩnh cho iOS
- 13. Quy trình chính xác để liên kết các thư viện tĩnh có các thư viện tĩnh phổ biến là gì?
- 14. C++ Thư viện được chia sẻ liên kết tĩnh
- 15. Liên kết thư viện tĩnh với thư viện được chia sẻ của JNI trong Android
- 16. Tạo thư viện tĩnh và liên kết với thư viện đó bằng tiền tố
- 17. Làm thế nào để liên kết libstdC++ tĩnh với clang ++
- 18. Có thể liên kết Thư viện tĩnh C++ với thư viện được chia sẻ không?
- 19. thứ tự ngủ đông theo liên kết
- 20. Thứ tự đường ray theo mô hình được liên kết
- 21. Cách cung cấp tùy chọn trình liên kết khi liên kết thư viện tĩnh với qmake?
- 22. Cách thích hợp để liên kết với các thư viện từ thư viện cho iPhone/CocoaTouch
- 23. Liên kết glibc tĩnh nhưng một số thư viện khác tự động với GCC
- 24. Liên kết tĩnh OpenSSL crypto thư viện trong CMake
- 25. Buộc liên kết tĩnh của thư viện được liên kết với mục tiêu Xcode?
- 26. Lỗi liên kết Visual Studio 2012 với các thư viện tĩnh
- 27. Liên kết thư viện tăng
- 28. Có gì bên trong tệp .lib của thư viện tĩnh, thư viện động được liên kết tĩnh và thư viện động được liên kết động?
- 29. Nói trực tiếp gcc để liên kết thư viện tĩnh
- 30. Chuyển đổi thư viện liên kết tĩnh thành dll động
https://en.wikipedia.org/wiki/Technical_debt –
liệt kê tất cả các lib (theo thứ tự bất kỳ) hai lần: '-la -lb ...- lx -la -lb ... -lx' (tốt nhất được thực hiện với một tập lệnh) – mlvljr
@mlvljr Điều này có thể hoặc có thể không đủ. – user1225999