繁体   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