Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当第三方库不提供调试生成时,如何调试应用程序?_C++_Debugging_Visual C++_Linker - Fatal编程技术网

C++ 当第三方库不提供调试生成时,如何调试应用程序?

C++ 当第三方库不提供调试生成时,如何调试应用程序?,c++,debugging,visual-c++,linker,C++,Debugging,Visual C++,Linker,我有一个正在开发的应用程序,它使用两个第三方库,每个库都有预编译的lib和dll,其中一个为调试和发布版本(A[d].lib)提供必要的.lib文件,另一个只为发布版本(B.lib)提供.lib文件 在发布模式下编译(使用MSVC9)工作正常,但是尝试在调试模式下编译失败,因为第三方A需要LIBCMTD.lib(或MSVCRTD.lib),而第三方B需要LIBCMT.lib(或MSVCRT.lib) 我可以解决这个问题吗?或者我被困在发布模式下调试吗?尝试将/NODEFAULTLIB:LIBCM

我有一个正在开发的应用程序,它使用两个第三方库,每个库都有预编译的lib和dll,其中一个为调试和发布版本(
A[d].lib
)提供必要的
.lib
文件,另一个只为发布版本(
B.lib
)提供
.lib
文件

在发布模式下编译(使用MSVC9)工作正常,但是尝试在调试模式下编译失败,因为第三方
A
需要
LIBCMTD.lib
(或
MSVCRTD.lib
),而第三方
B
需要
LIBCMT.lib
(或
MSVCRT.lib


我可以解决这个问题吗?或者我被困在发布模式下调试吗?

尝试将
/NODEFAULTLIB:LIBCMT
传递到链接器。

我不确定是否可以直接使用静态库进行调试。我建议您将库B打包成一个动态库,然后使用这个新的B'库。您的问题将消失。

您想要完全调试模式,还是只想能够调试?如果是后者,只需转到链接器选项,并启用符号信息(.pdb)的生成。通过这种方式,您可以在自己的代码中使用调试器,单步执行代码行,并查看变量。如果您对优化器创建的控制流中的更改感到恼火,可以转到编译器选项并关闭优化。这样您就可以使用调试器并在发布模式下构建。一旦您对代码感到满意,您只需将设置更改回创建优化代码即可

使用您提到的标志,我得到了
错误LNK2001:未解析的外部符号\uuu无效\u参数\u noinfo
(因为
B
需要它).Google似乎对在预处理器中使用
\u SECURE\u SCL=0
来解决这一问题很感兴趣。我尝试了多种涉及_SECURE\u SCL的解决方案,但都没有效果。实际上,我会从另一端开始:只需使用现有的调试配置,并链接LIBCMT.lib、A.lib和B.lib。但要点是一样的:创建一个未经优化的可执行文件,它有调试信息,但有针对发行版libs的链接。@卡斯滕:是的,我想要完全调试,最后我选择了和MSalters(+1!)的方法。谢谢你的建议!一旦一切都解决了,这无疑是生产软件的一个很好的解决方案,但现在这似乎太麻烦了,谢谢!