创建在大多数PC上运行的C++程序
creating C++ program that runs on most of PCs
我有一个项目需要为小型可执行文件编写代码。我使用visual C++express 2010 IDE创建了这个文件。在我写完代码后,我试图将它复制到几台不同的电脑上。每次我点击这个文件执行它时,它都会给我一条错误消息。消息中说我必须安装(.NET framework)。我在YouTube上看了几个视频,解释了如何通过将运行库从多线程调试DLL(/MDd)更改为多线程调试(/Mtd)来克服这个问题。然而IDE无法调试C++代码,因为当我使用CLR模板创建项目时!有什么办法解决这个问题吗?一旦我在不同的电脑上使用,我可以创建一个类似的程序吗?
学习JAVA或C#这样的不同语言是否有助于创建在大多数Window平台机器上运行的小程序(比如我的程序)?
只需使用Qt-它运行在Windows、Linux、MacOS上,计划今年支持Android和iOS,此外它还支持嵌入式平台和一些更模糊的移动平台。此外,对Windows RT的支持刚刚启动。一个完整的图书馆,拥有大量的功能、良好的文档和大量的教育资源。它提供了大量的工具,从隐式共享容器到线程、信号和插槽、2D和3D图形、小工具、多媒体、传感器。。。等等。。。
您甚至可以在LGPL许可证下开发商业应用程序。
还附带了一个非常好的IDE-QtCreator。
您可以开发标准C++应用程序或使用QML,QML是一种类似JavaScript的标记和脚本语言,用于从C++实现的组件构建应用程序。您还可以扩展QML。使用QML进行开发要快得多,而且您仍然可以获得平台原生二进制的优势。
请注意,您仍然需要随应用程序附带一些DLL。当然,除非你使用静态构建,这需要你的应用程序是开源的,或者购买商业许可证。。。它不便宜。。。
但是,几MB的DLL仍然比整个DLL要好得多。NET框架。静态构建将生成大约8-9 MB的可执行文件,没有外部依赖关系。
坚持C++标准,避免Microsoft扩展(托管代码),只调用操作系统的POSIX函数,那么你应该能够编写可移植程序。
您似乎创建了一个Managed C++ Project
。相反,创建一个空的Win32 C++ project
,然后添加.cpp/.h文件。这将限制您使用所有具有C++运行时的PC上可用的默认库。如果您也想删除该依赖项,那么在运行时使用/MT
选项进行静态编译。详细信息@http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.71).aspx
当你继续前进时,你需要意识到你依赖什么库,这些库在什么版本的操作系统上可用,或者你是否需要将它们与你的位打包。
Java和C#都将有助于制作可移植程序。然而,通常情况下,人们必须为用这两种语言编写的可执行文件安装运行时环境。如今,C++比以往任何时候都更易于移植。您可以在浏览器中轻松运行C++可执行文件:
https://github.com/kripken/emscripten
http://code.google.com/p/nativeclient/
这使得Java和C#产生的许多原因变得无关紧要。
OpenGL等开放标准也使便携式GUI编程比以往任何时候都更容易。如果你想用C++编写一个简单的GUI,可以试试Qt。
注意:如果您没有使用过,可以在任何计算机上运行C++程序,而无需安装任何东西。NET框架。在您的情况下,可能有两个原因触发目标计算机中的错误。
- 新计算机没有所需的运行时程序集
- 新计算机不需要。NET框架
那么该怎么办:
-
在开始你的程序之前,你必须设计你要使用的天气。NET框架是否支持。如果您使用。NET框架开发程序时,您会安装相同或更高版本的程序。NET框架。
-
如果你不需要使用。NET组件,则目标计算机应仅包含运行时程序集。如何摆脱.net框架
- 右键单击解决方案->属性->常规->公共语言运行时支持->选择"无公共语言运行时间支持"中的项目
然后,您需要的只是目标计算机中的相关运行时程序集。
运行时程序集如何在新计算机中:
有两种方式:
-
在目标计算机中安装合适的C++争议环境(如果您使用VS2008 SP1,C++RD包应该是这样的。在下载之前,请考虑解决方案构建架构(32位/64位))。
-
使用解决方案包部署运行时程序集。(我喜欢这个,因为用户不需要安装任何第三方组件)
如何在我的项目中部署程序集:
-
为此,所有DLL、LIB、EXE都应该使用相同的运行时版本。(否则,您将面临通过"manifest"文件重定向程序集的麻烦)。
-
如何检查运行时版本。通过visual studio打开DLL、EXE(打开->文件)->展开RT_MANIFEST->双击其下的文件->然后打开程序集依赖项详细信息。->复制右栏中的数据并粘贴到记事本上。
你会在那里看到这种线条。以及您的特定DLL或EXE使用的版本运行时程序集。
assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86".....
识别运行时程序集的版本后,请遵循本教程,并尝试在新安装的计算机中运行。
最后:如果你认为这是。。布拉。。是如此复杂,并且您的程序非常简单,那么您可以考虑"运行时程序集静态链接"(试试谷歌)。但就我个人而言,我不喜欢这种方法。
祝你好运!
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址