2011-08-11 47 views
5

Tôi đang cố gắng biên dịch một ứng dụng Hello World 32 bit đơn giản được viết bằng C bằng Visual Studio 2010 trên máy 64 bit trên bản cài đặt mới của Windows 7 . Tôi cũng đã cài đặt "Windows SDK cho Windows 7 và .NET Framework 4" sau khi cài đặt Visual Studio. Tôi đã xây dựng ứng dụng chọn "Win32" làm nền tảng. Nó hoạt động trên Windows 7 nhưng nếu tôi chạy các ứng dụng trên máy tính 32-bit của tôi với Windows XP Professional (tươi cài đặt cũng này, mà không cần phần mềm và Service Packs) có vẻ như không làm việc nhận được lỗi này:Biên dịch ứng dụng 32-bit bằng Visual Studio trên máy 64 bit

"This application has failed to start because msvcr100.dll was not found" 

Nếu nó có thể hữu ích Dependency Walker phát hiện 2 lỗi (xem hình ảnh liên quan để biết chi tiết):

"Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module." 
"Error: Modules with different CPU types were found." 

http://img820.imageshack.us/img820/4725/errordp.png (hình ảnh)

Làm thế nào tôi có thể giải quyết nó? Cảm ơn!

Trả lời

2

Đừng tin tưởng Phụ thuộc Walker về điều này ... Nó cho thấy rõ ràng exe của bạn là 32 bit. Vấn đề của bạn là với VC redistributables, đó là các dll CRT - tìm vcredist_x86.exe trong bản cài đặt VS của bạn. Bạn nên chạy nó trước khi bạn chạy ứng dụng của bạn.

Một tùy chọn khác là liên kết tĩnh CRT. Xem /MT option. Sẽ làm cho exe của bạn lớn hơn, nhưng lưu các công cụ vcredist.

+0

Tôi đặt tùy chọn/MT, nhưng lần này tôi nhận được "thủ tục decodepointer điểm nhập cảnh không thể được đặt trong thư viện liên kết động kernel32.dll" tại sao? – mt22

+0

@Lorenzo, DecodePointer được hỗ trợ từ XP SP2 trở đi. Biên dịch với/MT đã chỉ giúp bạn tiếp tục, đến giai đoạn mà đây là vấn đề của bạn ... liên kết động sẽ dẫn đến cùng một vấn đề. Hoặc [biên dịch sang phiên bản XP cơ bản] (http://msdn.microsoft.com/en-us/library/aa383745 (v = vs.85) .aspx # setting_winver_or__win32_winnt), hoặc cập nhật XP. – eran

+0

Ok, cảm ơn @eran, một câu hỏi nhỏ khác: tại sao tôi không phải tin cậy Dependency Walker trong những trường hợp như thế này? Và những lỗi đó có ý nghĩa gì? – mt22

2

Sự cố ở đây là thời gian chạy C được chương trình được biên dịch sử dụng bị thiếu trên máy tính Windows XP. Visual Studio 2010 sẽ mặc định là thời gian chạy 10,0 (msvcr100.dll) không có sẵn trên XP theo mặc định. Bạn cần tự triển khai thời gian chạy C trên máy của mình để chương trình của bạn chạy.

Bạn có thể muốn đọc bài viết MSDN sau đó thảo luận về những vấn đề xung quanh việc triển khai các ứng dụng C được xây dựng với Visual Studio 2010

Có thể có thêm 32/64 vấn đề tại nơi làm việc nhưng điều này có vẻ là vấn đề chính

3

Máy chạy trên đó cần thư viện thời gian chạy. Xem phần này MSDN information.

1

Câu trả lời về thư viện thời gian chạy là chính xác. Một giải pháp có thể khác là liên kết tới các thư viện thời gian chạy tĩnh thay vì các phiên bản DLL. Bằng cách này bạn có thể xây dựng một tệp thực thi mà bạn có thể thả vào bất kỳ máy nào mà không có phức tạp triển khai thêm.

Đó là một sự đánh đổi, nhưng, mà không biết nhiều hơn về tình huống của bạn, nó có thể đáng xem xét.

Các vấn đề liên quan