针对在Visual Studio 中生成的exe不能在没安装Visual Studio 机器上运行的问题、、

本文讨论了在Visual Studio中编译的exe文件无法在未安装Visual Studio的计算机上运行的问题。主要原因是生成的exe依赖于特定版本的多线程库。为了解决这个问题,文章提到了六种不同类型的库,包括静态单线程和多线程库,以及动态链接库(DLL)。关键在于选择正确的编译器开关,如/MLD、/MTD等,确保生成的库是多线程安全的,并且与其他使用该库的项目保持一致。
部署运行你感兴趣的模型镜像

针对在Visual Studio 中生成的exe不能在没安装Visual Studio 机器上运行的问题、、

解决方法在vs下选择项目-属性-配置属性-c/c++-代码生成-运行时库----修改编译选项,将/MD或/MDd 改为 /MT或/MTd。
下面就分析为什么这么做、、、

(不好意思今天截图传不上,就先不上图了)

一般提示为无法连接到msvc**.dll,(说明缺少默写必要的库文件)
1选择release进行编译,至于release和debug的选择和区别,这里不多叙述(注意如果要在别的机器运行一段要选择release编译)。
2那么我们就找到以下文件
..\vs2008\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT
msvcm90d.dll
msvcp90d.dll
msvcr90d.dll(有些vs是80,)

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。(当然这种不是根本的解决办法。)
3看到dll文件那么就有必要看下库文件了
 
 
(部分翻译有问题,建议看msdn原网页显示网址为下连接)
请注意已被删除LIBCP.LIB和LIBCPD.LIB(通过老 / ML/ MLD选项)。使用LIBCPMT.LIB和LIBCPMTD.LIB而不是通过 / MT/ MTD选项。

默认情况下,当你建立你的项目的发行版本,其中一个基本的C运行时库(LIBCMT.LIB,MSVCMRT.LIB,MSVCRT.LIB)挂钩,这取决于您选择的编译器选项(多线程,DLL的/ CLR)。如果你有一个头文件在您的代码,标准C + +库将自动链接由Visual的C + +在编译时。


Standard C++ Library

Characteristics

Option

Preprocessor directives

LIBCPMT.LIB

Multithreaded, static link

/MT

_MT

MSVCPRT.LIB

Multithreaded, dynamic link (import library for MSVCP100.dll)

/MD

_MT, _DLL

LIBCPMTD.LIB

Multithreaded, static link

/MTd

_DEBUG, _MT

MSVCPRTD.LIB

Multithreaded, dynamic link (import library for MSVCP100D.DLL)

/MDd

_DEBUG, _MT, _DLL

 



有六种类型的可重用的库:

  • 静态单线程库(调试/释放)
  • 静态多线程库(调试/释放)
  • 动态链接库(DLL)(调试/释放)

请注意每个库都有一个调试版本和发行版本。DLL是多线程安全和单线程版本的CRT库不提供的DLL。如果的可重复使用的库或库中的任何用户正在使用多个线程,然后库需要1多线程的安全库类型。 注意调试库和编译器开关/ MLD,/ MTD,和/ MDD是只在Visual可用ç+ +版本4.0和更高版本。 下表应建立可重用的库(DLL类型是多线程安全)的六种类型中的每个使用编译器开关。任何使用可重复使用的库的项目,应使用相同的编译器开关。使用/ ML(默认)/ MLD /吨/ MTD /医师或/ MDd编译器开关时,编译器将对象文件的默认库名(图书馆“栏下所列)。 

可重用的库开关图书馆宏(S)
-------------------------------------------------- --------------
单线程/ML LIBC的(无)、
静态多线程/MT LIBCMT的_MT
动态链接(DLL)/MD MSVCRT _MT和_DLL
调试单线程/ MLD LIBCD的了_DEBUG
调试静态多线程/ MTD LIBCMTD _DEBUG和_MT
调试动态链接(DLL)/ MDD MSVCRTD _DEBUG,_MT和_DLL
 
来自http://support.microsoft.com/kb/140584/en-us
4看过这些,就知道是动态库的原因,由于对方机器没有这里所包含的动态链接文件,那么我们就可以选择将其编
译到静态库中,具体做法如下:
在vs下选择项目-属性-配置属性-c/c++-代码生成-运行时库----修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不    再需要VC的dll了。
这时再将relese下的exe放在别的没装vs的机器下就能运行了。。。。。。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值