[英]How to run in debug mode a program that calls link with CreateProcess
我正在使用CreateProcess
調用cl
和link
來編譯和鏈接另一個C ++程序( TestProg.cxx
)到DLL中。 我找到了正確的編譯和鏈接選項:
編譯選項:
/W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _WINDOWS /D _USRDLL /D BUILDDLL_EXPORTS /D _WINDLL /D _UNICODE /D UNICODE /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /errorReport:queue /LD
鏈接選項:
/INCREMENTAL /NOLOGO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /ERRORREPORT:QUEUE /Entry:DllMain
我用以下方式調用CreateProcess
:
if ( CreateProcess(full path to cl.exe, compilation options, NULL,NULL,FALSE,0, NULL,NULL,&si,&pi) )
{
//....
}
從VS工具提示運行應用程序,它可以正常工作並創建dll。
但是從VS調試器運行它,我得到以下LINK錯誤:
LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
或從鏈接選項中刪除鏈接庫時,出現以下錯誤:
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'
我究竟做錯了什么?
IMO似乎在調試模式下運行的鏈接選項中缺少某些內容,或者調試模式的搜索路徑缺少某些目錄。 我不知道如何解決這些情況。 我用Google搜索了過去1/2天,但沒有找到。 使用Windows API對我來說是新手。
提前謝謝了
您需要指定.lib文件的位置。 否則, link
不知道在哪里可以找到您的.lib文件。 您可以作為link
命令行參數( /LIBPATH:dir
)或通過設置LIB
環境變量來執行此操作。
這些.lib文件的確切位置取決於您的安裝。 打開Visual Studio命令提示符,然后鍵入set LIB
以找出適合您的安裝的設置。
我本人將盡量避免使用CreateProcess
進行構建自動化,因為它具有非常痛苦的界面。 我正在尋找一種高級腳本語言。 我也希望使用vcbuild
而不是手動調用cl
和link
。 但是,也許有一些很好的理由說明為什么您需要從我不知道的C ++代碼中執行此操作。
聽起來好像缺少從VS命令行運行時獲得的環境變量。 這也是庫搜索路徑的一部分。
請參閱C:\\Program Files\\Microsoft Visual Studio XX\\Common7\\vsvars32.bat
(取決於您的VS版本和安裝路徑,該路徑在VS100COMNTOOLS
(或VS90COMNTOOLS
或任何一個)環境變量中指定。
你為什么要這樣做? 您可能正在使用MSBuild來配置項目並對其進行構建。 您已經為您配置了項目,則可以從代碼中調用MSBuild。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.