编译程序

在linux环境下编译C++ 程序

ぃ、小莉子 提交于 2020-04-03 07:18:26
单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: 单个源文件生成可执行程序 /* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); } 程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件: $ g++ helloworld.cpp 编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++ 源代码文件。 ** 编译器默认的动作:** 编译源代码文件生成对象文件(object file),链接对象文件和 libstd c++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: $ ./a.out hello, world 更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件: $ g++ helloworld.cpp -o helloworld 在命令行中输入程序名可使之运行: $ ./helloworld

VS2010每次编译都重新编译整个工程的解决方案

馋奶兔 提交于 2020-04-03 05:47:18
在使用VS2010编译C++程序的时候,每次修改工程中的某一个文件,点击“生成-仅用于项目-仅生成**”时,往往都是整个工程都需要重新编译一遍。由于这个工程代码量太大,每次编译完成都需要将近10分钟左右的时间编译。最烦人的时候是当编译完了出错,修改了错误再次编译,浪费很多时间。 那么怎么配置VS2010像VC6.0那样默认的可以只编译修改后的文件呢? 针对这个问题的解决办法网络上也有不少,在这里我整理下我修改的配置。 第一因时间引起的: 首先,在debug模式下,删除功能debug目录所有的文件。 然后依次找到: 项目-属性-配置属性-C/C++-代码生成-启用最小重新生成:Yes(/Gm) 项目-属性-配置属性-C/C++-常规-调试信息格式:程序数据库(/Zi) 属性-配置属性-链接器-常规-“启用增量链接”选择“是” 最后,最好还要修改一处: 工具-项目和解决方案-生成并运行 运行时,当项目过期时,选择从不生成 勾选-在运行时仅生成项目和依赖项 MSBuild项目生成输出详细信息 选 ”最小“ 第二预编译头文件引起的: 项目-属性-配置属性-预编译头文件:Use/Yu 一般情况下这样配置之后,VS2010就会在每次编译的时候只是编译修改过的文件, 来源: https://www.cnblogs.com/qintangtao/p/3759030.html

lua:把lua文本文件“编译”成二进制的文本

天涯浪子 提交于 2020-04-02 19:37:22
当你发布lua时,你或许不想用户看到你的lua源码,更不想用户修改你的lua代码和系统内部的秘密,那就需要用别的方式来发布。 最终的文本文件可以通过lua作者提供的标准发布版本中的程序来执行。这个程序称做luac.exe,把lua文本文件“编译”成二进制的文件。这样就可以让别人更难知道你的游戏是如何运行的,采用了什么技术。 当写好一个lua文件后,可以通过一个典型的编译命令去“编译”这个文件: 这一行代码会编译helloworld.lua脚本并在helloworld文件中生成二进制数据。 lua解析器并不关心你传给它的是文本文件还是二进制文件,也不关心扩展名是什么。 用这个方法,就不用担心别人可以看到你的代码了。 补: 发现当用到require加载某些子模块时会有出错。根据《Lua 程序设计第二版》第15章所说: 当require一个模块mod.sub时,require会用原始的模块名“mod.sub”作为key来查询table package.loaded和package.preload,其中,模块名中的点在搜索中没有任何意义。 当搜索一个定义子模块的文件时,require会将点转换为另一个字符,通常就是系统的目录分隔符。转换之后require就像搜索其他名称一样来搜索这个名称。 所以最好的方法是在编译完lua脚本后,也把二进制文件改成.lua后缀。 来源: https:/

ld.so.conf 和 ldconfig

♀尐吖头ヾ 提交于 2020-04-02 07:22:39
今天重新编译以前的一个程序,里面用到iconv库:gcc test.cc -liconv 运行时:a.out:error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory 以前编译运行是可以的,可能是不久前升级了iconv库影响。在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/lib加到路径中也不行。 google了一下,解决了:在/etc/ld.so.conf中加一行/usr/local/lib,运行ldconfig。再运行a.out,行了。 ld.so.conf和ldconfig是维护系统动态链接库的。真不明白为什么iconv库安装时不把这一步也做了。 来源: https://www.cnblogs.com/amonw/archive/2006/02/06/326205.html

Makefile

人走茶凉 提交于 2020-04-02 05:33:57
目录 关于makefile make怎么执行 makefile简化 Makefile还有什么 以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐。在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理,方便更为灵活地编写makefile。 关于makefile makefile 带来直接好处就是——“自动化编译”。一旦写好,只需要一个make命令,整个工程完全自动编译,所以十分方便。而Makefile文件就是告诉make命令怎么样地去编译和链接程序。但是想要比较灵活的运用它,还是先要熟悉一些关于系统对程序编译和链接的知识。 一般来说,对C、C++程序、先把源文件编译成中间代码文件。Linux下是 .o 文件即 Object File,在Windows下也就是 .obj 文件,这个动作叫做 编译 (compile)。然后再把大量的.O文件合成执行文件,这个动作叫作 链接 (link) 编译时 ,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是让我们告诉编译器头文件的所在位置(头文件中放声明,而定义放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(.O文件或是OBJ文件)。 链接时

cmake使用

…衆ロ難τιáo~ 提交于 2020-04-01 07:56:12
一、 基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败 使用:cmake dir_path,生成工程文件或makefile文件 二、 概念 out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录; 2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录 3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验) 四、 语法 1. #注释 2. 变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值; 3. command (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格 4. set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list 5. Add_executable(${var}) <=> Add_executable

Java后台调用gcc编译C语言代码

老子叫甜甜 提交于 2020-04-01 01:01:18
想做一个能够在线编译代码运行的平台,Java和SQL已经支持了,因为是用Java写的后台,所以Java和SQL挺容易就实现了,做到支持C的时候就卡住了,网上搜了一下这种帖子好像很少。 我采取的办法是就是刚开始学C语言的教的调用GCC来编译.C文件的文件,首先将前端传过来的C代码写入到特定的路径下,然后利用Java的API调用CMD来执行gcc命令编译这个文件,这好像有点MakeFile文件的意思。。编译之后继续调用CMD执行生成的exe,同时获取CMD的输出,至此整个过程完成,但是最后需要做好一项善后工作,那就是继续调用CMD将这个exe的进程杀掉,否则会出现问题,因为exe还没停止,继续编译写入会报权限问题。 封装了整个编译运行的Servivce: package com.mine.ide.service.implement; import com.mine.ide.util.CLangUtil; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import java.io.*; import java.util.concurrent.*; /** * @author yintianhao * @createTime 20190625 11:14 *

编译内核及系统调用实验

天大地大妈咪最大 提交于 2020-03-31 14:15:25
电脑出现各种问题,在装虚拟机时也出现了各种问题,给的实验指导书也有各种问题。周四折腾一下午+晚上、周五一天、周六一天,遇到的各种问题都搞定了,实验成功了,现在贴出我的操作步骤,感觉这将会是我的最干的博客之一。 先贴出结果吧 准备工作: 我的电脑只有120G,之前一直做了个Ubuntu的启动盘用,这次没预料到实验对硬盘空间需求如此之大,只得重装虚拟机。在移动硬盘上开辟空间50G(建议不要装好系统后再扩展容量,时间耗费巨大而且ubuntu自带软件中没有硬盘分区软件,安装硬盘分区软件还需要很多依赖,烦不胜烦),在VMware Workstation上使用高级模式创建虚拟机,CPU和内存配置为2x2,4G。在创建完成ubuntu虚拟机后不要立即运行!!!因为VMtools在创建好了以后会自动加载到你刚指定的虚拟机文件夹中,在开启ubuntu虚拟机后它会和系统引导一起启动,导致系统卡死在“install vm-tools"这一行,解决的方法就是在虚拟机文件夹中找到autoinst.iso这个文件并删除(这会导致系统不能自动安装并且在装好系统后不能使用vmtools这个工具,如果想使用vmtools这个工具只能在系统安装完成后再安装,后面讲)。删除上述文件后可以启动系统安装了,,,,,,,,,,,,,安装完成后选择 设置中选择VM Workstation安装文件夹,在其中选择”linux

静态库和动态库的区别

喜欢而已 提交于 2020-03-31 05:45:54
real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null 需要强制加载指定类 或 直接通过类名引用 linux中静态库和动态库的区别 一、不同 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。 2. 动态函数库 这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。 二、相同 都是由*.o目标文件生成 ios 开发中 动态库 与静态库的区别 使用静态库的好处 1,模块化,分工合作 2

catkin_make 与cmake

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-31 02:51:00
http://blog.csdn.net/zyh821351004/article/details/50388429 1. catkin_make 与cmake的关系 程序在cmake编译的流程: cmake指令依据你的CMakeLists.txt 文件,生成makefiles文件,make再依据此makefiles文件编译链接生成可执行文件. catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径. 1) cmake标准流程 $ mkdir build $ cd build $ cmake .. $ make $ make install # (可选) 2) catkin_make 的流程 # In a catkin workspace $ catkin_make $ catkin_make install # (可选) 如果源码不在默认工作空间,需要指定编译路径: # In a catkin workspace $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally) 2. catkin_make 1) catkin_make默认的路径信息 catkin_make运行后终端输出文件部分解析 #基本路径 Base