我刚刚通过告诉我的 VS 2008 项目忽略项目属性菜单的链接器->输入部分中的 libc.lib 来编译和运行应用程序。在我这样做之前,VS 给了我旧的“致命错误 LNK1104:无法打开文件 'LIBC.lib'”消息。
如果我忽略 crt,我不确定这个应用程序是如何编译的,但这显然是我的无知。
我检查了 C/C++ 项目设置,运行时库设置读取多线程调试 dll(/MDd 标志)——所以我必须在某处链接到 VC80*.dll。
我不确定如何。我一直对visual studio中的crt设置感到困惑,静态或调试,多线程与否。通过阅读这个网站和谷歌,我现在对我的理解有了一个粗略的改进——如果你使用 dll,你没有那么多的代码膨胀,当程序需要它们时链接,可以通过覆盖 dll 来应用 crt 更新。换句话说,使用 dll 的常见原因。
但是多线程版本与单线程版本有什么关系?如果我碰巧与静态版本链接,我不能使用 win 线程或 pthreads,这意味着什么?
我听说过但从未完全关注过的另一件事——在一个 dll 中分配一个对象并从另一个 dll 中重新分配它时存在问题,或者类似的事情,与交叉分配有关。我解释得不是很好(因为我不明白),但我希望你明白我的意思,并能解释那里发生了什么。这是否意味着在我的程序中我不能在 dll 中的类上调用 new ObjectX() ?不能这么说吧?
感谢大家!