2009-09-16 23 views
23

Khi tạo một dll COM với VisualStudio, tất cả I thực sự cần là biểu tượng DllCanUnloadNow (và ba liên quan) được xuất từ ​​chính tệp dll. Không ai sẽ liên kết với thư viện của tôi, vì vậy tôi hoàn toàn không quan tâm đến tệp .lib, cũng như trong tệp .exp.Nhưng tôi không muốn tệp .lib hoặc .exp cho thư viện COM của tôi!

Tuy nhiên, tôi không quản lý để ngăn chặn việc tạo các tệp này. (Lưu ý: Tôi biết làm thế nào nó có thể loại bỏ chúng trong một bước sau xây dựng)

Đây là những lập luận mối liên kết của tôi:

/OUT:"u:/cada-nt/bin/PData.dll" 
/INCREMENTAL:NO 
/NOLOGO 
/DLL 
/MANIFEST:NO 
/DEF:"PData.def" 
/DEBUG 
/PDB:"u:/cada-nt/pdb/PData.pdb" 
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
        advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
        odbc32.lib odbccp32.lib 

Câu hỏi:

  • Có ai thành công trong việc không phải tạo các tệp .lib và .exp?
  • Có ai biết lý do tại sao các tệp này được tạo không?

Trả lời

-1

tại sao lại xảy ra sự cố khi tạo các tệp này? Chắc chắn nếu mọi người không liên kết trực tiếp với họ, tất cả những gì bạn cần làm là không phân phối các tệp đó và chỉ phân phối DLL.

+11

Không có vấn đề khẩn cấp. Tôi thậm chí có một cách giải quyết. Nó chỉ là vô ích mà các mối liên kết tạo ra chúng. Các tệp được tự động trên thư mục đầu ra, bên cạnh dll mà tôi cần phân phối. Nó lộn xộn. Nó làm phiền. – xtofl

+1

TBH Tôi nghĩ rằng nó rất thấp trong danh sách những việc cần làm, vì những lý do rõ ràng, rằng không ai đã từng làm phiền nó. – Goz

+10

-1: đây là một yêu cầu hoàn toàn hợp lý. Tôi cũng yêu cầu nó, vì những lý do tương tự, những tập tin đó gây phiền toái. – demoncodemonkey

2

Không chắc làm thế nào để tắt chúng đi, nhưng bạn có thể thực hiện một bước sau xây dựng để loại bỏ chúng, như thế này:

del $(OutDir)\$(ProjectName).lib 
del $(OutDir)\$(ProjectName).exp 

(trên VS2008 nó [Dự án] -> [Thuộc tính], sau đó cấu hình Properties-> Xây dựng Events-> Post-Xây dựng sự kiện)

(lưu ý tôi nhận ra bạn biết làm thế nào để làm điều này, nhưng câu trả lời này có thể giúp các googler tiếp theo ...)

+5

Đây là một hack. –

+2

Một tác dụng phụ của giải pháp này là việc biên dịch sẽ xảy ra mọi lúc, bởi vì trình biên dịch muốn tạo lại các tệp. –

15
mối liên kết

Visual Studio của có một tùy chọn /IMPLIB cho phép bạn chỉ định vị trí đầu ra chocủa bạnvà .exp tệp.

Bạn có thể thay đổi tùy chọn này trong tính chất của dự án:

Configuration Properties > Linker > Advanced > Import Library 

Bạn có thể đặt nó vào những điều sau đây, ví dụ:

$(Configuration)\$(TargetName).lib 

Các mối liên kết sẽ tạo ra .exp tập tin bằng cách sử dụng cùng tên là .lib.

+4

Đó không phải là những gì OP yêu cầu. Anh ta không muốn những tập tin được tạo ra bởi liên kết ở tất cả, không phải trong một thư mục khác nhau – philk

1

Có một số hàm bên trong thư viện COM được khai báo bằng __declspec (dllexport). Nó có nghĩa là chúng được xuất khẩu (có thể được sử dụng bởi hàm GetProcAdress) và mối liên kết nghĩ rằng có nhu cầu liên kết với thư viện động này (bất kể nó là exe hay dll - nói chung cấu trúc là như nhau) và tạo * .lib và tệp * .exp.

để tránh tạo các tệp này, bạn cần xóa tất cả __declspec (dllexport) khỏi các khai báo hàm

+0

thú vị, bạn có trỏ đến một nền tảng cụ thể không? – DanielV

+1

Điều này đã được xác minh cho trình biên dịch và trình liên kết mặc định của Visual Studio 2013. Nền tảng đích là x64 hoặc x86 hoặc Windows. –

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