2013-07-18 16 views
7

Wykonuję (przerażające) zadanie polegające na budowaniu LLVM 3.3 na oknach i doszedłem do etapu, w którym mam ładunek plików LLVM*.lib. Chcę połączyć je razem do jednej ogromnej wspólnej biblioteki DLL, ale mam problemy (to mój pierwszy raz łączenie rzeczy w oknach). Próbowałem:Łączenie partycji .libs w celu utworzenia biblioteki DLL: nierozwiązany symbol zewnętrzny _DllMainCRTStartup

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

ale bezskutecznie. Błędy go z:

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 

Internecie zasugerował dodanie przełącznika /DEFAULTLIB:corelib, więc zrobiłem to, ale znowu ma problemy:

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

jaki sposób mogę to zrobić?


EDIT: udało mi się rozwiązać powyższy problem, przez wdrożenie pusty DllMain i dokonywania EmptyDllMain.obj od niego:

#include <windows.h> 

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

a następnie próbuje:

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

ale biblioteka DLL, którą wydostaję, to zaledwie 8kb - wydaje się, że pominęło wiele megabajtów bibliotek LLVM! Jak mogę je włączyć?


EDIT2: I rozwiązać problemu na LLVM kompilację Windows przyjrzeć się tej document on github.

Odpowiedz

2

Miałem to raz podczas łączenia jednej biblioteki z niewłaściwą platformą ustawioną razem (od X86 do X64). Upewnij się, że wszystkie LLVM * .lib są budowy i związane z prawidłowym toolchain:

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

które można uzyskać dzwoniąc

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

też miałem podobne problemy podczas mieszania MT i MD CRT, polecam trzymać się

/MD (or /MDd for debug) 

podczas kompilowania obiektów dla którejkolwiek z LLVM * lib (i wszelkie inne obiekty z innych bibliotek zewnętrznych umieścić na niej link do nich).

[edytuj]

i kopać, że brzydkie EmptyDllMain.obj!

[/ edit]

2

Jeśli ręcznie wszedł _DllMainCRTStartup, upewnij się, orkisz go (przypadek zegarka) prawidłowo. Miałem _DLLMainCRTStartup i zajęło mi trochę czasu, aby złapać dlaczego wciąż otrzymałem błąd linkera. W przypadku systemu Windows CE wymagana biblioteka linków to corelibc.lib.

+0

Doskonała odpowiedź, ale co to jest biblioteka dla Visual C++ 6.0 i poniżej * (corelibc ma inną nazwę) *? – user2284570

0

usunąć pliki lib z „ignoruj ​​konkretnych bibliotek domyślnych” z „Linker-> Input” na właściwości projektu

Powiązane problemy