精华内容
下载资源
问答
  • 可执行程序
    千次阅读
    2022-01-13 22:34:35

    1源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称
    为源程序。C语言源程序的扩展名为“.c”。
    源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。

    2目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序
    的扩展名为“.obj”。
    目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问
    题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。

    3可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序

    称为可执行程序。可执行程序的扩展名为“.exe”(在dos/windows环境下)。

    程序 是为完成某项活动所规定的方法;
    程序模块 即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。
    描述程序的文件称为程序文件。

    更多相关内容
  • C/C++如何启动外部可执行程序(exe)

    千次阅读 2021-08-01 17:32:36
    本文将介绍四种启动外部可执行程序的方法,排版不分优先级,实际应用中需根据需求选择最合适的方法。 1.ShellExecute #include <windows.h> ShellExecute(NULL,L"open",L"F:\\Code\\C++\\startexetest\\...

    本文将介绍四种启动外部可执行程序的方法,排版不分优先级,实际应用中需根据需求选择最合适的方法。

    1.ShellExecute

    #include <windows.h>
    
    ShellExecute(NULL,L"open",L"F:\\Code\\C++\\startexetest\\Win32\\Debug\\startexetest.exe",NULL,NULL,SW_SHOW);

    HINSTANCE ShellExecute( 
    	HWND hwnd, 
    	LPCTSTR lpOperation,
    	LPCTSTR lpFile, 
    	LPCTSTR lpParameters, 
    	LPCTSTR lpDirectory, 
    	INT nShowCmd
    );

    • hWnd:用于指定父窗口的句柄。当函数调用过程中出现错误时,它将作为Windows消息窗口的父窗口。
    • lpOperation:用于指定要进行的操作, 如: open、runas、print、edit、explore、find。当此参数为NULL时,默认执行open操作。(open:表示执行由lpFile参数指定的程序,或者打开由lpFile参数指定的文件或文件夹。explort:表示打开由lpFile参数指定的文件夹。print:表示打印由lpFile参数指定的文件。)
    • lpParameters:若lpFile参数是一个可执行文件,则此参数指定命令行参数,否则此参数应设为NULL。
    • lpDirectory:用于指定默认目录
    • nShowCmd:用于指定程序窗口初始显示方式。

    缺点

      它虽然传回一个HINSTANCE,但他并不是真正的句柄,仅能拿它来做一些错误值检查。 

    优点:  

            它的功能比前WinExec()和system()更强大,它可以执行系统的Shell命令。比如可以启动一个默认的文字处理程序来打开txt文档,再比如可以启动一个默认浏览器来打开一个网址。 

    2.WinExec

    #include <windows.h>
    
    WinExec("F:\\Code\\C++\\startexetest\\Win32\\Debug\\startexetest.exe",SW_SHOW);

    UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow);
    • lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
    • uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。

    优点: 
      启动新进程后会立即返回,因此你的程序无需等待。 
      通过参数uCmdShow,可以一定程度上控制窗体的显示,比如让它后台运行而不显示出来。 

    缺点: 
      它完全与本进程脱离,无法对做些必要的控制 
      无法得知启动的程序是否退出。 
      得不到启动的程序的退出码。 
      不能打开txt文件或网址

    3.system

    #include <windows.h>
    
    system("F:\\Code\\C++\\startexetest\\Win32\\Debug\\startexetest.exe");

    函数功能:执行一个dos命令。如"ping www.vccode.com", "notepad.exe"。


    注意: 

    • 它不会立即返回,直到你启动的程序执行完成。 
    • 如果你启动是带界面的程序,调用此函数会自动打开一个控制台,给人感觉很不友好,但如果启动的程序本身是带控制台的,而且又需要等待它的完成,那这将是比较好的选择。 
    • 它的返回值代表是否执行成功以及程序的退出码。
    • 不能运行打开txt或者网站

    4.CreateProcess

        #include <windows.h>
    
    	STARTUPINFO StartInfo; 
    	PROCESS_INFORMATION pinfo; 
    	memset(&StartInfo,0,sizeof(STARTUPINFO)); 
    	StartInfo.cb = sizeof(STARTUPINFO);
    
    	CreateProcess(L"F:\\Code\\C++\\startexetest\\Win32\\Debug\\startexetest.exe"
    		,L"",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&StartInfo,&pinfo); 

    BOOL CreateProcess
    (
    	LPCTSTR lpApplicationName,
    	LPTSTR lpCommandLine,
    	LPSECURITY_ATTRIBUTES lpProcessAttributes,
    	LPSECURITY_ATTRIBUTES lpThreadAttributes,
    	BOOL bInheritHandles,
    	DWORD dwCreationFlags,
    	LPVOID lpEnvironment,
    	LPCTSTR lpCurrentDirectory,
    	LPSTARTUPINFO lpStartupInfo,
    	LPPROCESS_INFORMATIONlpProcessInformation
    );

    • lpApplicationName:指向一个NULL结尾的、用来指定可执行模块的字符串。这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine参数最前面并由空格符与后面的字符分开。
    • lpCommandLine:指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。
    • lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。在Windows NT中:SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符,如果参数为空,新进程使用默认的安全描述符。
    • lpThreadAttributes:同lpProcessAttribute,不过这个参数决定的是线程是否被继承.通常置为NULL.
    • bInheritHandles:指示新进程是否从调用进程处继承了句柄。如果参数的值为真,调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。
    • dwCreationFlags:指定附加的、用来控制优先类和进程的创建的标志。以下的创建标志可以以除下面列出的方式外的任何方式组合后指定。
    • lpEnvironment:指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。
    • lpCurrentDirectory:指向一个以NULL结尾的字符串,这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。
    • lpStartupInfo:指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。
    • lpProcessInformation:指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。

    .

    优点:功能十分强大,可以指定很多参数

    缺点:参数太多,使用起来比较麻烦

    展开全文
  • 程序从源代码到可执行程序

    千次阅读 2022-01-20 23:32:36
    程序从源代码到可执行程序所要经过的步骤 语言的分类: 解释性语言 解释性语言 -通过编译器-> 可执行程序文件(机器语言) 包括(库(动态库,静态库)) C C++ java C# objective-c等等 脚本语言 源代码就是可执行...

    程序从源代码到可执行程序所要经过的步骤

    语言的分类:

    1. 解释性语言
      解释性语言 -通过编译器-> 可执行程序文件(机器语言) 包括(库(动态库,静态库))
      C C++ java C# objective-c等等
    2. 脚本语言
      源代码就是可执行程序文件
      shell javascript python等
    3. 超文本语言
      HTML

    Ubuntu共享文件夹的默认位置

    cd /mnt/hgfs/
    

    程序从源代码到可执行程序中间经历的步骤

    1. 预处理
      预处理指令的执行 宏的展开(简单的替换)
      gcc -E *.c
      gcc -E test.c
      #将生成的文件内容重定向到test.txt
      gcc -E test.c > test.txt
      #查看文件的内容
      cat test.txt 
      
    2. 预编译
    3. 编译
      语法检查 程序优化
      生成目标程序 *.o文件(二进制文件)
      gcc -c *.c
      #可以直接指定输出的文件名
      gcc -c test.c -o a.o
      #输出汇编文件
      gcc -S test.c
      
    4. 链接
      将多个目标程序(包括库)链接成一个可执行程序文件
      gcc *.o -o *.exe
      #直接输出*.exe文件
        gcc test.o -o test.exe
      #默认输出一个a.out文件
      #文件的运行
      ./a.out
      ./test.exe
      

    本文如有错误还请大佬们指正

    展开全文
  • 源文件如何一步步到可执行程序【程序员必修课】

    千次阅读 多人点赞 2022-03-03 19:44:45
    想必大家编写的第一个程序都是hello world,到后来编写越来越多的程序,我们都知道编译链接,那我们是否了解一个源文件是如何编译为.exe的可执行程序的呢?下面我们就来深入了解一下 在C/C++中,一个程序要运行...

    ⚽引入

    想必大家编写的第一个程序都是hello world,到后来编写越来越多的程序,那我们是否了解一个源文件是如何编译链接为.exe的可执行程序的呢?下面我们就来深入了解一下
    在这里插入图片描述

    在C/C++中,一个程序要运行起来,要经历四个阶段:预处理、编译、汇编、链接,最后形成可执行程序
    由于windows下的vs系列是集编辑器、编译器、调试器等为一体的IDE环境,所以我们在Linux下演示

    ⚽预处理

    这里在test.c文件中编写了一个简单的测试代码
    在这里插入图片描述

    选项-E :让 gcc 在预处理结束后停止编译过程。只进行预处理,不会生成对应的文件,所以需要-o选项输出到指定文件
    选项-o :文件输出到文件,也就是将结果输出到指定文件

    gcc -E test.c -o test.i	#将test.c预处理后的结果输出到test.i文件
    

    在这里插入图片描述

    所以预处理阶段完成了:
    头文件展开、去注释、宏替换、条件编译

    且是先执行去注释,再执行宏替换的
    在这里插入图片描述

    ⚽编译(生成汇编代码)

    选项-S : 让gcc在编译阶段结束后停下来

    gcc -S test.i -o test.s	#将编译阶段结束后的结果输出到test.s的文件
    

    这里由于预处理后printf函数在main函数外调用所以报错,所以这里我们错误的调用printf函数就会在编译阶段报错

    在这里插入图片描述在这里插入图片描述

    而汇编阶段的主要工作就是进行:词法分析、语法分析、语义分析、符号汇总,最后将c代码优化后变为汇编代码

    那为什么要进行这些语法语义分析呢?

    如果我们要将下面的英语翻译成翻译成汉语,首先需要判断这些字符串哪些能组成一个单词,然后在判断单词是否正确以及每个单词的意思,最后得到对应的语义。在这里插入图片描述

    而编译器也是如此,因为程序本质上就是一定字符集上的一字符串,所以需要规定哪样的字符串是一个单词符号,检查代码的规范性、是否有语法错误等,还是需要判断单词符号的语法意义,是while循环,还是if判断或是其他语义,最后还有相应的优化生成中间代码最后翻译成汇编,当然这个过程是非常复杂的

    这里我们重新定义两个文件进行演示
    在这里插入图片描述

    gcc test.c Add.c -S	#汇编阶段结束后停止编译,生成test.s和Add.s文件
    

    可以发现test.s和Add.s文件都是汇编代码
    在这里插入图片描述

    ⭐符号汇总

    符号汇总是非常重要的,最终是为了在汇编阶段形成符号表,符号表包含名字(标识符)和此名字的有关的一系列信息,然后在链接阶段进行符号合并和重定向。
    因为printf函数和Add函数的定义并不在test.c文件中,所以不能生成地址
    在这里插入图片描述

    ⭐汇编(生成二进制机器码)

    gcc -c test.s Add.s			#程序编译到汇编阶段后停下来,将.s文件转换为.o的二进制目标文件
    

    汇编阶段:将汇编文件转换成二进制文件,生成.o的目标文件(类似于windows下的.obj目标文件)且是可重定向目标文件,不可以直接执行,需要通过链接后才能变成可执行程序

    可以看到test.o和Add.o二进制文件都是乱码
    在这里插入图片描述那么有的小伙伴就疑惑了,不应该是二进制吗?为什么都是乱码?

    在linux下目标文件是以elf格式组织的,而我们通过vim编辑器查看是以文本形式查看的,所以都是乱码

    readelf命令				#查看elf格式的文件信息
    readelf -a [目标文件]	#查看elf文件的所有信息
    

    我们通过readelf命令可以看到Add.o和test.o文件的段表,链接的时候就需要合并段表
    在这里插入图片描述以及Add.o和test.o文件的符号表

    在test.o中,main函数的size是67,而Add和printf函数的size都是0,因为这两个函数只有声明没有定义,所以需要通过下一步链接找到对应的函数,且它们是没有地址的,函数只有定义了才有地址
    在Add.o文件定义了Add函数,所以size为20

    在这里插入图片描述

    objdump -S [文件名] 	#反汇编目标文件或可执行程序的命令
    

    ⚡ 符号表简述

    在这里插入图片描述

    ⚡ 链接(生成可执行程序)

    链接完成:合并段表,符号表的合并和重定位

    在汇编阶段形成二进制文件后为什么不能直接执行,还需要链接呢?

    因为要将程序中的各种功能模块组合起来,将代码中的函数调用、外部数据和库关联起来,比如通过包含头文件将相关的库链接起来,简单来说程序运行需要的目标文件和所依赖的库链接起来才能形成可执行的文件

    前面我们在预处理阶段看到头文件stdio.h的展开,里面存放的只是一些库的所在路径,函数的声明等,那我们就需要在链接阶段链接库中对应的目标文件,以及我们在其他文件定义的函数
    在这里插入图片描述而可执行程序只有一个,所以将多个.o的目标文件链接起来,合并段表以及进行符号表的合并和重定位,链接库,最后形成可执行程序
    在这里插入图片描述在这里插入图片描述

    而链接阶段就要涉及动态库、静调库以及动态链接和静态链接的概念了,我将在下一篇文章中介绍

    ⚽总结

    在这里插入图片描述

    今天的分享到这里结束了,希望的的位置对你有所帮助,欢迎👍点赞 ,📝评论,🌟关注,⭐️收藏

    在这里插入图片描述

    展开全文
  • linux下shell脚本启动其他可执行程序

    千次阅读 2019-12-03 20:55:08
    一、C++测试程序如下: #include <QCoreApplication> #include <iostream> using namespace std; int main(int argc, char **argv) { cout << "--------------entry main-------------...
  • 可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序。本教程操作环境:windows7系统、Dell G3电脑。源程序:源程序指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可...
  • qt项目在Linux平台上面发布成可执行程序.run

    千次阅读 多人点赞 2019-07-18 19:50:17
    ​ 简介: qt项目在Linux平台上面发布成可执行程序.run,或是免安装的绿色版本、亦或者安装形式的安装包。 文章目录本博文的简述or解决问题?开发平台环境:重要提示:项目在Linux平台发布:本次心得总结:参考...
  • linux环境打包python工程为可执行程序

    万次阅读 多人点赞 2019-03-14 15:36:21
    本次又个需求,在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方,因为不能直接给源码给甲方,所以寻找方法将python开发的源码打包成一个可执行程序,注意是打包成在ubuntu上面的可执行程序...
  • 一个程序从源代码到可执行程序的过程

    万次阅读 多人点赞 2018-06-26 10:45:13
    一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。 其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。 链接中,分为静态链接和动态链接...
  • linux 下打包可执行程序

    千次阅读 2019-07-11 16:28:39
    首先创建可执行文件的文件夹,我们打包的可执行文件依赖的动态库都会被打包到该文件下。 将可执行文件MyApp拷贝到该目录下. mkdir release_dir cp MyApp release_dir 进入该文件夹下,创建打包脚本文件,将exe...
  • MATLAB可执行程序生成方法

    千次阅读 2017-01-12 16:48:10
    2 可执行程序生成花了一天时间浏览了参考文献[1],初步掌握了matlab gui编程方法。关于gui编程细节不在这里详细介绍,有过matlab编程经验的同学参考《MATLAB+GUI设计学习手记》即可上手。本文档主要介绍matlab环境下...
  • C语言中调用可执行程序的方法。

    千次阅读 2020-01-03 09:41:53
    在C/C++程序中,经常需要调用其它的程序来先成某项任务,例如...它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,...
  • 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 源代码(.c...
  • 如何使用QT调用外部可执行程序

    万次阅读 2018-07-03 21:36:50
    在QT中调用外部可执行程序,如exe等。在本例中我们使用QT的QProcess类调用Git Bash中的命令,(在我们项目中需要调用一个bash命令,所以将命令写在.sh文件中,但是MAC中双击.sh文件并不能执行,修改方法是将文件后缀...
  • Android 运行 Linux 可执行程序

    千次阅读 2018-07-09 16:27:24
    原文地址:https://www.cnblogs.com/zengjfgit/p/4455668.html/**************************************************************************** * Android 运行 Linux 可执行程序 * 声明: * 1. L...
  • **PyInstaller**是一个十分神奇的第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行(包括引用的第三方库),也...
  • linux上的两种可执行程序

    千次阅读 2017-11-21 17:06:00
    一、 Linux 系统上有两类的 Linux 可执行程序。1、 静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 2、 ...
  • Hello.c #include<stdio.h> int main() { printf("Hello World\0"); return 0; } ...我们在VS下只需要Ctrl+F5便能打印出Hello World, ...在源代码文件转变为可执行文件中间发生了什么 ...
  • 对于可执行程序的动态库加载路径rpath(run path),我们可以通过工具来查看,也可以去修改,避免多次编译。 这里介绍两个Linux平台来查询和修改rpath的工具 1. chrpath(change run path) 一般系统不会此工具,...
  • 源代码生成可执行程序过程

    千次阅读 2018-02-01 21:41:19
    问:经常敲代码,代码是如何生成可执行程序的? 答:过程分为两个大的过程:翻译和链接;翻译分为编译和链接;编译又分为预编译,编译,汇编三个过程(具体过程看下图) 程序编码: gcc test.c -o test 1)...
  • C/C++源代码如何变成可执行程序的?

    万次阅读 2018-07-20 15:53:05
    如下图所示: 详细解释 1、编译预处理 ...对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。 对于后者,则将取消对某个宏的定义...
  • LINUX下在任意终端运行可执行程序

    万次阅读 2018-07-13 10:57:35
    如何将自己编译好的可执行程序在任意终端下运行?1.将编译好的可执行程序移动/复制到/bin目录下$ cp/mv filename /bin (#filename为编译好的可执行程序的名称,下同)2.配置环境变量对于bash:终端运行:vi ~/....
  • 当我们写好一个C程序的时候,仅仅是一个.c的源程序,而我们运行完成之后就是一个.exe的可执行程序了,在这个过程中都发生了什么呢? (1).c的源程序会经过翻译环境和运行环境两个大的步骤。 其中,翻译环境包含...
  • 将Python程序变成可执行程序的方法: 1、需要使用pyInstall工具将Python程序变成可执行程序,该工具的使用需要在windows下安装pywin32-218.win32-py2.7.exe工具,下载地址:...
  • 首先,通过go语言执行可执行程序需要用到os/exec包 package exec import "os/exec" exec包执行外部命令 步骤: 写一个go语言小程序并通过go build命令来编译成可执行文件package main import "fmt" func ...
  • 介绍如何使用Pyinstaller对python程序及GUI进行打包,生成可执行文件exe,并对打包过程中可能出现的路径、第三方库等问题进行了说明。
  • 今天改动一个程序,需要在linux环境获取执行程序的绝对路径,搜索到两个函数,在此做下... 获取到可执行程序的绝对路径,存放到buf中,size是指定的buf大小。若size指定的大小比 buf短,会返回NULL。若不知道buf的...
  • 从C语言源码到可执行程序一般要经过以下的处理步骤: 预处理 在这一阶段,源码中的所有预处理语句得到处理,例如 #include语句所包含的文件内容替换掉语句本身 所有已定义的宏被展开 根据#ifdef,#if等语句的条件...
  • 1.查看可执行程序的链接库 使用ldd命令查看可执行程序的链接库 尤其是当我们调用了第三库支持,一般来说,程序设计时会安装整个库,但实际程序需要的并不会是整个库,这时候我们只要通过 ldd 就可以很清晰的查看其...
  • 可执行程序加载到内存的过程

    千次阅读 2018-10-08 09:27:36
    可执行程序加载到内存的过程 在linux中,程序的加载,涉及到两个工具,linker 和loader。Linker主要涉及动态链接库的使用,loader主要涉及软件的加载。 1、 exec执行一个程序 2、 elf为现在非常流行的可执行文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,391,540
精华内容 1,356,616
关键字:

可执行程序