2013-07-18 3 views
7

Ich führe die (erschreckende) Aufgabe der Erstellung von LLVM 3.3 auf Windows und ich habe auf der Bühne, wo ich eine Last von LLVM*.lib Dateien haben. Ich möchte sie zu einer großen gemeinsamen DLL verbinden, aber ich kämpfe (das ist das erste Mal, dass ich Sachen über Windows verlinke). Ich habe versucht:Linking viele .libs, um eine DLL zu machen: ungelöst externes Symbol _DllMainCRTStartup

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

aber ohne Erfolg. Es Fehler mit:

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 

das Internet Zugabe schlug die /DEFAULTLIB:corelib Schalter, so dass ich tat, aber auch hier hat es Probleme:

> 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' 

Wie kann ich das tun?


EDIT: ich es geschafft, das obige Problem zu beheben, indem Sie eine leere DllMain Umsetzung und Herstellung eines EmptyDllMain.obj davon:

#include <windows.h> 

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

und dann zu versuchen:

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

aber Die DLL, die ich herausgeholt habe, ist nur 8kb groß - es scheint die vielen Megabyte an LLVM-Bibliotheken verpasst zu haben! Wie bekomme ich sie?


EDIT2: ich die LLVM Kompilierung unter Windows Problem gelöst, in diesem document on github einen Blick darauf werfen.

Antwort

2

Ich hatte dies einmal beim Verknüpfen einer Lib mit einer falschen Plattform zusammen (X86 bis X64). Stellen Sie sicher, alle LLVM * LIB sind bauen und mit der richtigen Werkzeugkette verbunden:

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

, die Sie erhalten, indem Aufruf

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

auch ähnliche Probleme, die ich hatte, als MT und MD CRTs Mischen, empfehle ich halten Sie

/MD (or /MDd for debug) 

wenn die Objekte für eine der LLVM * LIB (und alle anderen Objekte aus anderen externen Bibliotheken verknüpfen Sie in diese) zu kompilieren.

[Bearbeiten]

Und zu, dass hässlich EmptyDllMain.obj!

[/ edit]

2

Wenn Sie manuell die _DllMainCRTStartup eingegeben, sollten Sie es geschrieben (Uhrgehäuse) richtig. Ich hatte _DLLMainCRTStartup und brauchte eine Weile, um zu fangen, warum ich noch den Linkerfehler empfing. Für Windows CE ist die erforderliche Verknüpfungsbibliothek corelibc.lib.

+0

Ausgezeichnete Antwort, aber was ist die Bibliothek für Visual C++ 6.0 und darunter * (corelibc hat einen anderen Namen) *? – user2284570

0

entfernen lib-Dateien von „spezifischen Standardbibliotheken ignorieren“ von „Linker-> Input“ auf Projekteigenschaften