2012-07-05 33 views
5

Tôi có dự án MSVC++ bao gồm một thư viện tĩnh, một số thư viện tĩnh và một số thư viện tĩnh được biên dịch trước. Các exe sử dụng liên kết gia tăng để tăng tốc độ xây dựng thời gian.Exe thực hiện liên kết đầy đủ khi thay đổi Thư viện, mặc dù liên kết gia tăng

Khi tôi thay đổi tệp .cpp trong dự án thực thi, việc biên dịch + liên kết rất nhanh (< 10s).
Tuy nhiên, khi tôi thay đổi tệp .cpp trong một trong các thư viện của riêng tôi, dự án thực thi dường như đang thực hiện một liên kết đầy đủ đối với mọi thư viện mà nó sử dụng.
Tôi không chắc chắn nữa nếu nó là một liên kết đầy đủ trong thực tế, nhưng từ "vc90.pdb không tìm thấy" Linker Cảnh báo, tôi có thể nói rằng nó liên kết với một số thư viện bên ngoài mà không thay đổi gì cả.

Dưới đây là một ví dụ về cấu trúc dự án:

  • precompiled thư viện của bên thứ ba ExtLib1, ExtLib2ExtLib3
  • riêng Thư viện MyLib, sử dụng của bên thứ ba lib ExtLib1
  • riêng Exe MyExe, sử dụng MyLibExtLib1-3

Thay đổi tệp .cpp trong MyLib sau đó sẽ dẫn đến MyExe được liên kết với MyLib, ExtLib1, ExtLib2ExtLib3, ngay cả khi Liên kết gia tăng được bật.

Liên kết đầy đủ mất khoảng 5 phút trong dự án của tôi, vì vậy tôi hỏi: Có cách nào để chỉ liên kết lại thư viện đã thay đổi không?

Trả lời

2

Đây là phần giới thiệu về incremental linking. Nó liệt kê các tình huống sẽ gây ra một liên kết đầy đủ. Một trong số đó là "Một đối tượng đã được biên dịch với tùy chọn/Yu/Z7 được thay đổi.", Kiểm tra xem MyLib của bạn có bắt được nó hay không.

+0

Thư viện của tôi được biên soạn với/Yu/Zi .. Tôi đã thử tắt các tiêu đề được biên dịch sẵn cho thư viện (tức làloại bỏ/Yu) nhưng nó không thay đổi nhiều. Có lẽ mối liên kết trong thực tế đang cố gắng để làm một liên kết gia tăng nhưng liên kết gần như bất cứ điều gì. Sẽ phải điều tra thêm về ngày mai –

1

Khi một thư viện tĩnh thay đổi sẽ luôn có một liên kết đầy đủ cho thực thi, ít nhất là trong Visual Studio 2013, và có thể bạn sẽ nhận được một cái gì đó như thế này trong cửa sổ đầu ra:

2>Link: 
2> LINK : library changed; performing full link 

Tin tốt mặc dù : Tôi đã làm một bài kiểm tra nhanh trong Visual Studio 2015 và liên kết gia tăng dường như hoạt động như mong đợi.

Nguồn: rất nhiều thử nghiệm và nhìn xung quanh, có cùng một vấn đề. Ngoài ra, điều này: http://www.pcreview.co.uk/threads/incremental-linking-and-multiple-projects.1431266/, cụ thể:

Đây là theo thiết kế. Chúng tôi không thể liên kết gia tăng khi thay đổi lib tĩnh. Điều đó chưa từng được hỗ trợ trước đó.

Ronald Laeremans, Visual C++ đội

Edit - nó khẳng định rằng VS 2015 có gia tăng liên kết khi sử dụng thư viện tĩnh: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx.

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