2010-01-15 33 views
12

Nhóm của tôi và tôi đang phát triển một dự án VC++ 6. Tất cả chúng ta đều sử dụng cùng một mã cơ sở (sử dụng hệ thống kiểm soát phiên bản), và tất cả trình biên dịch/liên kết/môi trường của chúng ta (bao gồm cả thứ tự thư mục), như chúng ta có thể nói, đều giống nhau. Tất nhiên chúng tôi đang sử dụng cùng một phiên bản VC++ với cùng một gói dịch vụ (VC6 SP6).Tại sao xây dựng cùng một dự án tạo ra tệp EXE khác nhau cho mỗi nhà phát triển

Vấn đề là EXE mà mỗi người trong chúng ta xây dựng có một chút khác biệt.

Tôi biết rằng mỗi khi bạn tạo EXE trên cùng một máy tính, có 3 vị trí trong tệp nơi trình liên kết lưu trữ dấu thời gian. Tôi không nói về những khác biệt này.

Mặc dù tệp EXE của chúng tôi có cùng độ dài, khi chúng tôi so sánh EXE, có 1000 byte khác nhau. Nhiều byte trong số đó khác 0x20 về giá trị.

Bất kỳ ý tưởng nào có thể là lý do?

Chỉnh sửa: Gỡ lỗi xây dựng (Trên thực tế, Chúng tôi đã không kiểm tra bản phát hành).

Chỉnh sửa: Sự khác biệt nằm trong phần nhị phân, không phải trong chuỗi văn bản.

Chỉnh sửa: Tất cả các nhà phát triển đều sử dụng cùng tên ổ đĩa/thư mục, cho nguồn và cho sản phẩm.

+0

Tôi cho rằng bạn đang hỏi về phiên bản phát hành, phải không? –

Trả lời

5

Nếu phiên bản Debug có tùy chọn "Liên kết tăng dần", thì có lẽ đó là lý do cho sự khác biệt.

+0

Bạn có thể vui lòng xây dựng? –

+2

nó chỉ là một đoán. Liên kết gia tăng thêm một số thông tin gỡ lỗi mỗi khi bạn xây dựng dự án. Nó không tạo ra một * clean * exe. –

+0

Tôi sẽ kiểm tra vào Chủ nhật. Cảm ơn bạn. –

0

Chỉ cần đoán: các phần chưa được khởi tạo của chuỗi hoặc thuộc tính chuỗi của một độ dài nhất định trong đó số 0 không ở cuối?

4

Vì 0x20 là sự khác biệt giữa các ký tự ASCII chữ hoa và chữ thường, tôi tự hỏi liệu những khác biệt này có nằm trong đường dẫn tệp mà trình biên dịch/trình liên kết nhúng vào nhị phân hay không (xác nhận thư có lẽ?). Có thể cây dev của bạn khác nhau ("C: \ DevTrees \ MyProject \ SuperFoo" trên một hộp và "E: \ work \ projects \ superfoo" trên một hộp khác?).

1

Có thể trùng hợp, nhưng 0x20 là sự khác biệt giữa các giá trị của chữ thường và chữ thường ASCII (ví dụ: 'A' == 65 == 0x41, 'a' == 97 = 0x61).

3

Tôi đồng ý với những gì NickD nói. Trong quá trình gỡ lỗi, liên kết gia tăng là trên mà không xây dựng lại exe từ đầu, nhưng phụ thêm/chèn/loại bỏ mã ở đây và ở đó cho mỗi bản dựng.

I.e. bố trí của exe phụ thuộc vào mọi biên dịch kể từ lần đầu tiên.

Một bản dựng sạch sẽ mang lại kết quả giống nhau trên các trình biên dịch giống hệt nhau.

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