2010-02-24 26 views
11

Tôi đang cố gắng xây dựng một dự án mã nguồn mở rất phức tạp với VC++. Dự án bao gồm hàng chục thư viện và một thư mục thực thi tùy thuộc vào các thư viện đó.Tôi có thể yêu cầu trình liên kết VC++ bỏ qua các phần bên ngoài chưa được giải quyết không?

Vì một số lý do VC++ linker không muốn xem khoảng 40 chức năng được triển khai trong một trong các thư viện đó và báo cáo "tham chiếu bên ngoài chưa được giải quyết" trên mỗi, vì vậy tôi không thể liên kết. Tôi không muốn lãng phí thời gian giải quyết vấn đề - những chức năng đó có khả năng không bao giờ được gọi.

Tôi muốn chỉ yêu cầu trình liên kết liên kết những gì nó thấy và chèn một số xử lý lỗi hợp lý (như báo cáo lỗi và chấm dứt chương trình) thay vì thiếu chức năng. Làm thế nào tôi có thể làm điều đó?

Trả lời

13

Bạn có thể sử dụng tùy chọn liên kết /FORCE:UNRESOLVED.

Các tài liệu cho rằng có chứa các cảnh báo khá kín đáo:

Một tập tin được tạo ra với tùy chọn này có thể không chạy như mong đợi.

Trong trường hợp, sẽ không có lỗi xử lý - chỉ là sự cố.

6

Nếu các chức năng thực sự không bao giờ được gọi, hãy tạo các thư viện thực (các tệp .lib) cho các thư viện. Sau đó, trình liên kết sẽ chỉ trích xuất từ ​​thư viện những gì cần thiết.

Công việc của nhà liên kết là giải quyết tất cả các tham chiếu, vì vậy tôi không nghĩ bạn sẽ làm cho nó chèn mã xử lý lỗi.

P.S. Điều đầu tiên tôi muốn kiểm tra là xem các hàm C có được biên dịch thành C++ hay không, dẫn đến các ký hiệu bị thiếu.

+0

+1 cho PS. Các tệp .c có tên bị xáo trộn khác với tệp .cpp w/VisualStudio. Tùy thuộc vào cài đặt của bạn, họ cũng có thể sử dụng một quy ước gọi điện khác. –

+0

Vâng, đôi khi được gọi, nhưng khi tôi sử dụng chương trình, những đường dẫn đó không bao giờ được thực hiện. Vì vậy, mối liên kết là đúng - nó cần chức năng. Tôi vẫn muốn nó tạo ra tệp thực thi. +1 anyway. – sharptooth

5

Nếu chúng không bao giờ được gọi, hãy xóa các tham chiếu khỏi dự án của bạn. Nếu chúng được gọi, sau đó sửa chữa vấn đề chết tiệt. Không có lựa chọn nào khác ở đây.

1

Có một số ngoại lệ đáng chú ý, nhưng hầu hết các dự án OpenSource không được thiết kế để được xây dựng theo VisualStudio.

Nói chung đối với cổng Windows, bạn nên sử dụng hoặc là cygwin hoặc hệ thống mingw. Lời khuyên của tôi thường dành cho mingw, trừ khi chương trình sử dụng nhiều cuộc gọi Unix OSey như đường ống và tín hiệu.

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