簡體   English   中英

如何在調試模式下運行調用CreateProcess鏈接的程序

[英]How to run in debug mode a program that calls link with CreateProcess

我正在使用CreateProcess調用cllink來編譯和鏈接另一個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而不是手動調用cllink 但是,也許有一些很好的理由說明為什么您需要從我不知道的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM