Tôi muốn triển khai một DLL rất đơn giản với ứng dụng C# của tôi, nhưng bất kỳ DLL nào mà tôi xây dựng trong Visual Studio 2008 dường như có một sự phụ thuộc vào "Microsoft.VC90.CRT". Có thể xây dựng một DLL bằng cách sử dụng VS2008 mà không có sự phụ thuộc này? Làm thế nào tôi có thể nói điều gì đang gây ra sự phụ thuộc?Có thể xây dựng một DLL trong C++ không có phụ thuộc không?
Trả lời
Tôi không chắc chắn về phiên bản VC++ mới nhất, nhưng trước đây bạn có thể yêu cầu trình liên kết liên kết với phiên bản tĩnh của thư viện thời gian chạy MSVCRT thay vì phiên bản động (DLL). Có thể tùy chọn này vẫn tồn tại.
Cung cấp công cụ này một shot: http://www.dependencywalker.com/. Nó sẽ cho phép bạn đi qua các phụ thuộc của bạn trên một exe hoặc dll đã cho.
Dường như việc tạo một tệp DLL rỗng trong VS2008 cũng có sự phụ thuộc này. Tôi đã không thêm bất kỳ tài liệu tham khảo thêm hoặc bất cứ điều gì, chỉ là một dự án trống rỗng. –
Theo this MSDN page, thư viện tĩnh vẫn có sẵn. Chuyển đến thuộc tính dự án, thuộc tính cấu hình, C/C++, Tạo mã, Thư viện thời gian chạy.
Chọn Gỡ lỗi đa luồng cho cấu hình gỡ lỗi và Đa luồng cho cấu hình phát hành. (Không chắc chắn nếu các tên đều giống nhau trong VS2008, nhưng nên là "một nơi nào đó xung quanh có". Có thể cập nhật ngày mai với sự khác biệt cụ thể VS2008)
Ngoài ra, như wbic16 đề xuất, sử dụng phụ thuộc walker để xác định phụ thuộc tĩnh khác.
Nếu bạn hoàn toàn chắc chắn bạn không có bất kỳ phụ thuộc nào trong thời gian chạy C, thì bạn có thể tránh liên kết với nó bằng cách bật cờ "Bỏ qua tất cả thư viện mặc định" (/ NODEFAULTLIB) trong dự án Linker -> Input trang tùy chọn. Bạn cũng có thể phải tắt kiểm tra thời gian chạy cơ bản (đặt "Kiểm tra thời gian cơ bản" thành Mặc định trong C/C++ -> Tạo mã) và bạn cũng có thể phải xóa điểm nhập (đặt "Không nhập điểm" thành "Có (/ NOENTRY) "dưới Linker -> Nâng cao).
Xem thêm http://support.microsoft.com/kb/814472, nó có một số thông tin tốt về xây dựng DLL cho Tiện ích mở rộng được quản lý cho C++.
Chỉnh sửa: Lưu ý rằng chạy mà không có thời gian chạy C cũng có nghĩa là bạn không có chức năng phân bổ bộ nhớ dễ dàng như malloc() và mới.
Tôi nghĩ rằng NODEFAULTLIB chỉ nên được sử dụng trong những trường hợp rất hiếm khi bạn có thể đảm bảo rằng thư viện chuẩn không được sử dụng. Nếu không, bạn nên tắt liên kết thời gian chạy là tĩnh. –
Với một chút công việc, libCTiny vẫn hoạt động như một sự thay thế cho lib mặc định. Loại thư viện này làm cho/NODEFAULTLIB có thể sử dụng được.
Để trả lời câu hỏi thứ hai của bạn, với trình chuyển đổi liên kết/VERBOSE, trình liên kết sẽ cho bạn biết ký hiệu nào được lấy từ thư viện nào.
Đảm bảo xây dựng mọi thứ trong bản phát hành thường xuyên trong gỡ lỗi, dll được liên kết với các dll gỡ lỗi đặc biệt thường không được gửi kèm với cửa sổ và sẽ gây ra sự cố phụ thuộc.
- 1. Làm thế nào để xây dựng một dự án C# mà không kiểm tra phụ thuộc?
- 2. Khi xây dựng một tệp DLL, tệp LIB được tạo có chứa tên DLL không?
- 3. Có thể xây dựng một vỏ C tương tác không?
- 4. maven lực xây dựng lại các dự án phụ thuộc (xây dựng phụ thuộc đầu tiên)
- 5. C# Dto xây dựng và phụ thuộc tiêm
- 6. Visual studio project xây dựng các phụ thuộc không có tham chiếu?
- 7. Maven - Xây dựng với các phụ thuộc
- 8. Có thể lắp ráp C# .dll có điểm vào không?
- 9. Xây dựng một JNI DLL bằng MINGW
- 10. C# Hàng đợi hoặc ServiceBus không có phụ thuộc?
- 11. Xây dựng một dll .NET để WP7
- 12. Có cách nào để xây dựng một DLL giống như C từ một mô-đun Python không?
- 13. Khi bước Xây dựng không thành công trong xây dựng thành phố nhóm, tôi có thể dừng các bước xây dựng trong tương lai không?
- 14. Bạn có thể gọi một C# DLL từ một DLL C?
- 15. Không thể tải tệp hoặc lắp ráp '***. Dll' hoặc một trong các phụ thuộc của nó
- 16. Có thể xây dựng FreeGLUT trên Mac OS X không?
- 17. Tôi có thể xây dựng một kết quả từ một tệp trong Java không?
- 18. Tôi có thể kết hợp nhà xây dựng trong C#
- 19. msvcr90.dll phụ thuộc vào dự án VS 2005 C++
- 20. xây dựng một viên đá quý ruby và có điều kiện xác định phụ thuộc
- 21. Biểu đồ phụ thuộc có thể có vòng lặp không?
- 22. Yi có thể xây dựng trên Windows không?
- 23. Có phải phụ thuộc vào một liên kết có thể có trong Makefile không?
- 24. Tại sao không có DLL Python được xây dựng với tải MSVC với mod_wsgi?
- 25. Làm thế nào để làm cho Jenkins kích hoạt một xây dựng trên một dự án phụ thuộc khi một phụ thuộc là xây dựng
- 26. Có một IDE Linux (C++) có thể 'xây dựng' một dự án từ một tệp makefile không?
- 27. VC++: KB971090 và chọn Visual C Runtime DLL phụ thuộc
- 28. không thể xây dựng một Dockerfile cụ
- 29. msvcp90.dll phụ thuộc vào sai msvcr90.dll?
- 30. Tôi có thể xây dựng ứng dụng x64 trên máy 32 bit không?
Đây là một ý tưởng thú vị. Có vẻ như MS khuyên bạn không nên làm điều này, nhưng nếu nó giải quyết được vấn đề của tôi ... –
Điều này làm việc như một người vô địch - cảm ơn. –
Tôi không đồng ý. Bạn có thể chạy vào tất cả các loại vấn đề khi bạn cố gắng liên kết các thư viện tĩnh trong thư viện đó là động. –