2013-07-18 38 views
7

Tôi đang thực hiện nhiệm vụ xây dựng LLVM 3.3 (đáng sợ) trên các cửa sổ và tôi đã tải xuống các tệp LLVM*.lib. Tôi muốn liên kết chúng với nhau để một DLL chia sẻ rất lớn nhưng đang đấu tranh (đây là lần đầu tiên tôi liên kết nội dung trên cửa sổ). Tôi đã thử:Liên kết rất nhiều .libs để tạo DLL: biểu tượng bên ngoài chưa được giải quyết _DllMainCRTStartup

link /DLL /MACHINE:X64 /OUT:LLVM3.3.dll LLVM*.lib 

nhưng vô ích. Nó lỗi với:

LINK : warning LNK4001: no object files specified; libraries used 
LINK : error LNK2001: unresolved external symbol _DllMainCRTStartup 
LLVM3.3.dll : fatal error LNK1120: 1 unresolved externals 

Internet đề nghị thêm /DEFAULTLIB:corelib chuyển đổi, vì vậy tôi đã làm điều đó nhưng một lần nữa nó có vấn đề:

> link /DLL /MACHINE:X64 /DEFAULTLIB:corelibc /OUT:LLVM3.3.dll LLVM*.lib 

LINK : warning LNK4001: no object files specified; libraries used 
LINK : fatal error LNK1104: cannot open file 'corelibc.lib' 

Làm thế nào để làm điều này?


EDIT: tôi quản lý để khắc phục vấn đề trên, bằng cách thực hiện một sản phẩm nào DllMain và làm cho một EmptyDllMain.obj từ nó:

#include <windows.h> 

BOOL APIENTRY DllMain(HANDLE hModule, 
        DWORD ul_reason_for_call, 
        LPVOID lpReserved 
       ) 
{ 
    return TRUE; 
} 

và sau đó cố gắng:

link /DLL /OUT:LLVM3.3.dll LLVM*.lib EmptyDllMain.obj 

nhưng DLL tôi nhận ra chỉ là 8kb - có vẻ như đã bỏ lỡ nhiều megabyte thư viện LLVM! Làm thế nào để tôi đưa chúng vào?


EDIT2: tôi đã giải quyết được biên soạn LLVM trên Windows vấn đề, hãy nhìn vào document on github này.

Trả lời

2

Tôi đã có điều này một lần trong khi liên kết một lib với một nền tảng sai được đặt cùng nhau (X86 đến X64). Hãy chắc chắn rằng tất cả các LLVM * .lib được xây dựng và liên kết với các toolchain đúng:

[...]\Microsoft visual Studio 10.0\VC\bin\amd64\ cl.exe and link.exe 

mà bạn nhận được bằng cách gọi

"%PROGRAMFILES(X86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 

Ngoài ra tôi đã có vấn đề tương tự khi trộn MT và MD CRT, tôi khuyên bạn nên bạn dính vào

/MD (or /MDd for debug) 

khi biên dịch các đối tượng cho bất kỳ LLVM * .lib nào (và bất kỳ đối tượng nào khác từ thư viện bên ngoài khác mà bạn liên kết vào).

[sửa]

Và đá ra điều xấu xí EmptyDllMain.obj!

[/ sửa]

2

Nếu bạn tự bước vào _DllMainCRTStartup, hãy chắc chắn bạn đánh vần nó (trường hợp đồng hồ) một cách chính xác. Tôi đã có _DLLMainCRTStartup và mất một lúc để nắm bắt lý do tại sao tôi vẫn nhận được lỗi liên kết. Đối với Windows CE, lib liên kết bắt buộc là corelibc.lib.

+0

xuất sắc trả lời, nhưng các thư viện cho Visual C++ 6 là gì.0 và nhỏ hơn * (corelibc có tên khác) *? – user2284570

0

gỡ bỏ những file lib từ "bỏ qua các thư viện mặc định cụ thể" từ "Linker-> Input" trên thuộc tính dự án

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