2013-07-18 6 views
7

Windows上でLLVM 3.3をビルドする(恐ろしい)タスクを実行しています。私はLLVM*.libファイルのロードを持っています。私はそれらを1つの巨大な共有DLLにリンクしたいが、苦労している(これはウィンドウ上のものをリンクする初めてのことだ)。私は試しました:.libsをたくさんリンクしてDLLを作成する:未解決の外部シンボル_DllMainCRTStartup

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

しかし、役に立たないです。これでエラー:

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 

インターネットが/DEFAULTLIB:corelibスイッチを追加することを示唆し、私はそれをしたが、再び、それは問題があります。

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

私はこれをどのように行うのですか?


EDIT:私は空のDllMainを実装し、それからEmptyDllMain.objを行うことにより、上記の問題を解決するために管理:

#include <windows.h> 

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

、次にしよう:

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

が、私が手に入れたDLLはちょうど8kbです - それはLLVMライブラリの多くのメガバイトを逃したようです!どのようにそれらを取り込むのですか?


EDIT2:私はこのdocument on githubを見て、Windowsの問題にLLVMのコンパイルを解決しました。

答えて

2

1つのlibを間違ったプラットフォームセット(X86〜X64)にリンクしている間に、これは一度しかありませんでした。 .lib *すべてのLLVMを確認してください構築し、正しいツールチェーンとリンクしている:MTとMDブラウン管を混合したときに

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

を呼び出すことによって取得

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

はまた、私は私がお勧め、同様の問題を抱えていましたLLVMのいずれかのオブジェクトをコンパイルするとき、あなたが

/MD (or /MDd for debug) 

に固執* .libファイル(および他の外部ライブラリから他のオブジェクトは、これらにリンク)。

[編集]

そして醜いEmptyDllMain.objことを追い出します!

[/編集]

2

手動_DllMainCRTStartupを入力した場合、正しく(時計ケース)あなたはそれを綴らてください。私は_DLLMainCRTStartupを持っていましたが、リンカエラーをまだ受けている理由をキャッチするのに時間がかかりました。 Windows CEの場合、必要なリンクlibはcorelibc.libです。

+0

Visual C++のライブラリは何ですか?0以下*(corelibcは別の名前を持つ)*? – user2284570

0

プロジェクトプロパティの "Linker-> Input"から "ignore specific default libraries"のlibファイルを削除します

関連する問題