首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我们想要运行一个可执行的c++文件时,为什么我们需要在它前面加上"./“?

当我们想要运行一个可执行的C++文件时,需要在它前面加上"./"是因为该文件所在的目录通常没有被包含在系统的PATH环境变量中。在Linux和类Unix系统中,"./"表示当前目录,通过在文件名前加上"./",告诉系统执行当前目录下的可执行文件。这是因为系统会按照环境变量PATH中指定的目录顺序搜索可执行文件,而当前目录通常不在PATH中,所以需要明确指定路径。

如果不加上"./",系统会认为该文件是一个系统命令而不是当前目录下的可执行文件,因此会报错。为了避免与系统命令冲突,建议始终加上"./"来明确指定要执行的文件是当前目录下的可执行文件。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云CVM(云服务器):提供基于云计算的虚拟服务器,可满足各种规模的业务需求。产品介绍链接:https://cloud.tencent.com/product/cvm
  • 腾讯云VPC(私有网络):为用户提供隔离的网络环境,实现安全可靠的云上网络拓扑。产品介绍链接:https://cloud.tencent.com/product/vpc
  • 腾讯云COS(对象存储):提供可扩展的云端存储服务,支持海量数据的存储和访问。产品介绍链接:https://cloud.tencent.com/product/cos
  • 腾讯云SCF(无服务器云函数):基于事件驱动的云函数计算服务,免去了服务器管理的烦恼。产品介绍链接:https://cloud.tencent.com/product/scf
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++の函数——内联函数&函数指针

所谓内联函数,其实本质上也是一种函数,在形式上的表现就是在普通函数前面加上关键字"inline",然后相对于普通函数来说,它也比较短小。...如何定义内联函数 定义内联函数就要在函数的前面使用“inline”关键字。...4、内联函数通过使用指令缓存来增加引用的局部性 5、通过将其标记为内联,您可以将函数定义放入头文件中 缺点: 1、由于代码扩展,它增加了可执行文件的大小 2、c++内联在编译时解决。...这意味着如果您更改内联函数的代码,您将需要使用它重新编译所有代码,以确保它将被更新 3、当在头文件中使用时,它会使头文件变大,包含用户不关心的信息 4、如上所述,它增加了可执行文件的大小,这可能会导致内存抖动...重载函数的指针 前面我们说到了函数的重载,就是说在同一个源文件中函数具有相同的名字,但是具有不同的参数列表时的情况,因此我们很容易延伸到函数指针里面,就是这里要说的重载函数指针。

2.6K21

【Linux】编译器-gccg++使用

在用gcc时候有一个选项-o,后面接一个名称,就是把编译的可执行程序再起一个名字: gcc test.c -o my.exe -std=c99 -o也可以放在前面,但是-o紧跟的就是修改的文件名 gcc...如果想要编译一个指定名称的c++程序,怎么写呢?...那么给它加上可执行的权限: 发现还是不能运行 一个文件能不能被指向,不止取决于它的权限,还要本身就是可执行程序。 得明白二进制目标文件是一个临时文件,是不能够执行的。...我们可以看看这个库的大小: ls /lib64/libc-2.17.so -l 一般进行链接时是把程序和这个库链接形成一个可执行的程序。...小明在这个网吧(就相当于动态库)的9号机(相当于库里面的一个方法,printf),当小明在学校里面作业(程序执行的代码)想要用到电脑,去了网吧(跳转到库)的9号机(想要的方法),用完之后回学校(返回程序

19210
  • 【Linux】软硬链接与动静态库

    当然,假如我们将源文件删除或者改变源文件路径后,那么软链接文件也就运行不了,因为软链接文件内仅仅只是源文件所在的路径,当源文件不在时,软链接文件也就“失效了”。...当然,假如此时我们将源文件的路径给更改,并不会发生什么影响,但是假如我们将源文件给删除。我们会发现,那个数字就会由2变成1,但依然可以运行。 接下来我们看一个现象:为什么目录文件硬链接数为2?  ...动静态库 什么是库文件? 我们在编写C/C++代码时,实际上一直都在用库(c/c++标准库),在编写代码时,有很多库函数诸如printf等,我们为什么能直接拿来用呢?...对于静态库的使用,还有第二种方法如下: 第二种方式使用静态库:将头文件以及库文件安装在系统目录 由于gcc/g++在编译时,会默认去系统目录搜索,进行路径匹配,这也是为什么我们平常用c/c++标准库时,...同时假如存在多个进程同时运行且使用同一个库,那么动态库也只需要在内存中加载一份,然后映射到各自的共享区,通过库地址+偏移量就可以跳转到方法的实现。大大节省了空间的使用。

    23230

    Linux基础——Linux开发工具(中)_gccg++

    让我们来进行一个简单的测试: 如果我们想执行这个程序,我们可以: 指令:./a.out 注意:必须加上.才表示要在当前目录下找可执行文件。...函数库 函数库一般分为静态库和动态库两种: 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。...其后缀名一般为.a 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统的开销。...动态库一般后缀名为.so,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。...完成了链接之后,gcc 就可以生成可执行文件 我们可以用指令来查看一个可执行程序依赖的库: 指令:ldd 可执行程序 因此,test可执行程序所依赖的标准库在路径lib64里有一个文件叫libc.so

    16510

    【Linux】常用工具(上)

    sl 命令,因为安装需要 root 权限,所以我们在安装时要在前面加上 sudo,意思是使用 root 权限执行这条命令,如何才能使用 sudo 将会在后面介绍;如下图: 执行这条命令之后可能会让你输入当前用户的密码...链接 链接是将 test.o 文件加上系统库生成可执行程序的过程,其指令为 gcc test.o -o 可执行文件名,如下图: 上图中的 mycode 就是一个可执行的程序文件,我们执行它只需输入指令...上面的四个步骤就是我们程序的翻译过程,但是我们平时想要执行一个程序的时候并不需要分别执行上面的步骤,例如我当前的目录下只有一个 .c 文件,如图: 我们当前可以直接将 test.c 文件直接生成可执行文件...,只需要执行指令 gcc test.c 即可,如下图: 系统默认生成的可执行文件的名称为 a.out ,我们想要执行它的时候,只需要在当前目录下找到它直接执行即可,其指令为 ....,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。

    21110

    【Linux】常用工具(下)

    ); 结果如下: 这时候就基本完成我们的倒计时了,但是倒计时到个位数的时候,前面空了一个字符,不太美观,这是因为 %2d 是默认右对齐,我们在前面加上负号,就是左对齐了,所以我们继续修改: 9...下面我们 make 生成可执行程序,然后运行,观察结果: 加载完成后就是上图这样子。这是简单的实现了一个进度条的版本,下面我们进一步改进这个进度条。...必须在源代码生成二进制程序的时候, 加上 -g 选项;如下我们在编辑 Makefile 文件时,在建立依赖方法时需要给可执行程序加上 -g 选项: 此时我们退出 Makefile,执行 make,然后对...ret 的地址: 如果想要取消显示某个变量,可以使用 undisplay + 序号 即可,其中序号是 display 前面显示的序号,如下: 当前就取消了 &ret 的显示。...:until + number 运行到当前函数的结尾:finish 从一个断点运行至下一个断点:c 查看调用堆栈:bt 更改变量的值:set var + 需改变量 = 改的值

    21010

    【Linux】深度解析与实战应用:GCCG++编译器入门指南

    首先对于一个C或C++程序从源代码到可执行文件的编译过程通常包括四个步骤:预处理、编译、汇编和链接。...库分为静态库和动态库两种: 静态库在编译时将库代码直接复制到可执行文件中,因此生成的可执行文件较大,但运行时不再需要库文件,其后缀名一般为“.a”。...动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。 4....默认情况下(即不指定-g选项时),GCC/G++会以类似于Release模式的方式编译程序,即进行优化但不包含调试信息。如果你想要使用GDB等调试工具来调试你的程序,你需要在编译时加上-g选项。...核心转储文件调试 当程序崩溃时,Linux系统会自动生成一个核心转储文件(core dump)。GDB可以加载这个文件进行调试,帮助开发者分析崩溃原因。

    22010

    Linux开发工具——gcc篇

    gcc -E xxx.c -o xxx.i#将原文件进行预处理,为了得到预处理后的文件,我们加上“-o”选项,得到目标文件   创建一个C的源文件:   对该文件进行编写:   将该文件进行预处理得到目标文件...我们可以使用 ldd 命令来查看对应可执行程序的库文件:   其实我们为什么可以直接运行C语言的代码是因为我们在Linux平台下 已经安装了对应的库文件以及标准头文件!   ...动态库一般后缀名为 “.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。...如果我们想要程序进行静态链接,生成目标文件时需要加上 -static 选项,如果你的系统下没有安装C/C++静态库可以使用这条指令安装: yum install -y glibc-static glibc-devel-static...一般我们编译C语言的代码直接使用: gcc xxx.c -o 运行程序文件名#编译出来直接得到可执行程序 ✈️ 总结 普通用户想要进行sudo操作,需要root账号在sudoers文件里面将该普通用户进行对应的设置

    19910

    详解动态库和静态库

    前言 在C、C++中我们使用过标准库,比如在使用strerror、vector、string等时,都只是调用了这些函数接口,这些都是需要具体的实现。...让我们来看看C语言库: 将来运行程序,需要二进制文件和库文件 看下C++标准库: 在Linux系统中,.so结尾是动态库,以.a结尾是静态库; 在Windows中,.dll结尾是动态库,lib结尾是静态库....c文件可形成一个.o文件,将这些.o文件链接形成可执行文件,头文件是一个手册,提供函数声明,告诉用户如何使用,.o文件提供实现,我们只需要补充一个main文件,调用头文件提供的方法,然后和.o文件进行连接...为什么在搜索头文件的时候仅需指定路径呢?...动态库要在程序运行的时候要找到动态库加载运行。静态库为什么没有这个问题?因为静态库在编译期间已经将库中的代码拷贝到可执行程序内部了,加载和库就没有关系了。

    21910

    MinGW安装教程

    在刚开始学 C语言 时,一般情况下所有代码都写在一个文件中,只要输入几个简单的命令,就能用 MinGW 编译成可执行文件。...它只相当于一个下载器,当其运行时,将会从 MinGW 的官方服务器上下载真正的 MinGW 安装管理器。 5.MinGW安装管理器的安装程序——首页 ?...相信这是学编程的大多数人,入门时的第一个程序,所以这里也就不再赘述了。 D.将hello.c编译成可执行文件 ?...因为我们编译时没有指定生成的程序名,所以 MinGW 默认将程序命名为 a ,加上后缀名就是 a.exe 了。如果我们想在编译时就指定生成的程序名,就需要使用 gcc 命令的 -o 选项了。...当以后我们的程序变复杂了,可能会在一个工作目录下编译出复数个程序,这时就必须用 -o 选项了,否则编译出的程序都叫 a.exe ,会在生成时互相覆盖掉。

    3.6K10

    MinGW 安装教程

    在刚开始学 C语言 时,一般情况下所有代码都写在一个文件中,只要输入几个简单的命令,就能用 MinGW 编译成可执行文件。...它只相当于一个下载器,当其运行时,将会从 MinGW 的官方服务器上下载真正的 MinGW 安装管理器。...D.将hello.c编译成可执行文件 之前说过 MinGW 是命令行工具没有图形用户界面,所以编译操作需要在命令提示符中进行。...因为我们编译时没有指定生成的程序名,所以 MinGW 默认将程序命名为 a ,加上后缀名就是 a.exe 了。如果我们想在编译时就指定生成的程序名,就需要使用 gcc 命令的 -o 选项了。...当以后我们的程序变复杂了,可能会在一个工作目录下编译出复数个程序,这时就必须用 -o 选项了,否则编译出的程序都叫 a.exe ,会在生成时互相覆盖掉。

    1.7K10

    【Linux】进程理解与学习Ⅲ-环境变量

    这种写法错误) 假如我们想要保持一个变量的内容,并用该变量名去定义另一个变量时,我们要在该变量名称前加上符号(比如我用myval的内容去定义age,就要写成age=myval.其中 在定义变量时,前面加...这里举个例子:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。...PATH : 指定命令的搜索路径 SHELL : 当前Shell,它的值通常是/bin/bash。 USER:当前用户 PATH 我们在写完代码并编译,生成一个可执行程序时,为什么运行的时候要加./?...实际上运行一个程序的前提是找到该程序。只有找到它,才能运行它,而./的含义大家应该知道,表示的是当前所在路径。 那么为什么我们输入ls的时候,则不用指定ls所在的具体位置呢?...★总结 上面讲的有些零碎,这里做一个总结: 【y=a】等号左边表示的是变量名,右边表示变量内容 我们可以通过echo $变量名的指令,来查看该变量的内容 在定义变量时,前面加上export,则会将该变量导入环境变量表

    93920

    【Linux】动静态库

    对于学习C/C++的同学来说:听到最多的就是标准库,其次就是库函数。但究竟什么是库呢?为什么我们只需要添加一下头文件,就可以使用库中包含的函数了呢?别着急,通过本文,我们都会讲清楚。...一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接...4.2动态库的加载问题 采用动态库的程序在使用库中的方法时,会在使用的地方留下一个标记,在程序运行以后进行动态链接时,会将这个标记替换为动态库中的地址。...当一个使用了动态库的进程A运行起来以后在需要动态库a时,操作系统会先在内存中搜寻a,是否存在,如果存在,就直接将a通过页表进行映射进进程A的进程地址空间中的共享区中,如果不存在就会将磁盘中的动态库a加载进入内存...当一个动态库,真正的被映射进地址空间的时候,它的起始地址才能真正确定! 此时动态库中的方法的地址就等于库的地址加上自己在库中的偏移量。

    9110

    C++面试题

    采用此链接方式生成的可执行文件,可以独立载入内存运行; 动态链接,链接器先从所有目标文件中找到部分缺失的地址,然后将所有目标文件组织成一个可执行文件。...如此生成的可执行文件,仍缺失部分函数和变量的地址,待文件执行时,需连同所有的链接库文件一起载入内存,再由链接器完成剩余的地址修复工作,才能正常执行。 4....构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它但析构却不一定,我们往往通过基类的指针来销毁对象。...当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码——既不是为基类,也不是为它的派生类(因为类不知道谁继承它)。所以它使用的VPTR必须是对于这个类的VTABLE。...当删除容器中一个元素后,该迭代器所指向的元素已经被删除,那么也造成迭代器失效。erase方法会返回下一个有效的迭代器,所以当我们要删除某个元素时,需要it=vec.erase(it);。

    1.7K42

    c++动态库和静态库的区别_静态库里面包含动态库

    l 程序在运行时与函数库再无瓜葛,移植方便。 l 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。.../StaticLibrary -lstaticmath l -L:表示要连接的库所在目录 l -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上...那么,在执行的时候是如何定位共享库文件的呢? 1) 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径。...冠以extern “C”限定符后,并不意味着函数中无法使用C++代码了,相反,它仍然是一个完全的C++函数,可以使用任何C++特性和各种类型的参数。...:表示要连接的库所在的目录。 l -l:指定链接时需要的动态库。编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a/.so来确定库的名称。

    1.9K30

    环境变量与命令行参数详解

    \n"); sleep(1); } return 0; } ​ 我们将其运行编译并生成为可执行文件 myproc ,当我们要运行它的时候,都得在这个可执行文件前面加一个.../myproc ​ 我们再仔细想想以前接触到的一些指令比如说 which、touch 等等命令,它们其实也是一些可执行文件,这个可以用 file 指令验证一下: ​ 那为什么都是可执行文件,我们自己写的...myproc 就要在前面加上 ./ 才能执行呢,而系统中的指令则不用呢? ​...至于这里为什么要加 呢,因为 PATH 相当于 bash 是一个全局变量,所以用 echo 查看的时候要加上 下面我们就来介绍一下环境变量! Ⅰ....下面介绍两个方法: 修改相关配置文件,但是对小白来说极其不推荐。当系统登录成功后,系统会把各种需要的脚本运行一下,然后我们就看到echo $PATH里的内容了。

    1.4K20

    【Linux系统编程】四、Linux环境变量与命令行参数详解

    \n"); sleep(1); } return 0; } ​ 我们将其运行编译并生成为可执行文件 myproc ,当我们要运行它的时候,都得在这个可执行文件前面加一个.../myproc ​ 我们再仔细想想以前接触到的一些指令比如说 which、touch 等等命令,它们其实也是一些可执行文件,这个可以用 file 指令验证一下: ​ 那为什么都是可执行文件,我们自己写的...myproc 就要在前面加上 ./ 才能执行呢,而系统中的指令则不用呢? ​...至于这里为什么要加 呢,因为 PATH 相当于 bash 是一个全局变量,所以用 echo 查看的时候要加上 ​ 下面我们就来介绍一下环境变量! Ⅰ....下面介绍两个方法: 修改配置文件,但是对小白来说极其不推荐。当系统登录成功后,系统会把各种需要的脚本运行一下,然后我们就看到 echo $PATH 里的内容了。

    12010

    12、动态链接库,dll

    动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。...1、我们可以把完成某种功能的函数放在一个动态链接库中,提供给其它函数调用。...在使用静态库情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件。产品发布时不需要发布被使用的静态库。...在使用动态库情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间中...同样,可以把上面定义的DLL1加在一个类前面,或类的成员函数前面来把类或类的成员函数导出。

    84820

    【Linux】进程概念(下)

    我们平时在 Linux 中写一份代码,想要运行起来首先需要找到这个可执行程序的路径,所以如果这个可执行程序在当前路径下,就需要在前面加上 ./ ,例如下图: 那么通过上面命令行参数的学习,我们知道,Linux...中的指令也是可执行程序,那么为什么它们的指令不用加 ./ 就能正常运行呢?...此时我们的路径也就添加到 PATH 中了,我们可以查看一下: 如上图,我们确实将路径添加到了 PATH 中;那么我们现在执行当前路径下的可执行程序时就不用在前面加上 ./ 了;如下图: 如果我们想删除当前路径呢...进程地址空间 首先我们回顾一下我们以前学习 fork 的时候,父子进程之间是怎么运行的,我们这时候想起来还有一个问题还没解决,那就是当子进程修改代码时,会发生写时拷贝,但是一个变量不同的值为什么会有相同的地址呢...g_val,当子进程对它进行修改时,父进程还是原来的 g_val,因为父子进程之间的数据互不影响,具有独立性;我们观察运行的结果会发现,它们的地址竟然是一样的!

    17210

    MinGW安装教程——著名CC++编译器GCC的Windows版本

    在刚开始学 C语言 时,一般情况下所有代码都写在一个文件中,只要输入几个简单的命令,就能用 MinGW 编译成可执行文件。...它只相当于一个下载器,当其运行时,将会从 MinGW 的官方服务器上下载真正的 MinGW 安装管理器。...因为我们编译时没有指定生成的程序名,所以 MinGW 默认将程序命名为 a ,加上后缀名就是 a.exe 了。如果我们想在编译时就指定生成的程序名,就需要使用 gcc 命令的 -o 选项了。...注意:选项 -o 是英文字母,并不是数字零,并且它的后面只能是想设置的文件名。 这种在编译时命名的方法好像很鸡肋,初看好像只是帮我们省了一些时间,毕竟我们也可以在编译后手动改名。...当以后我们的程序变复杂了,可能会在一个工作目录下编译出复数个程序,这时就必须用 -o 选项了,否则编译出的程序都叫 a.exe ,会在生成时互相覆盖掉。

    32.1K34
    领券