导航:首页 > 源码编译 > 编译的时候指定编译器

编译的时候指定编译器

发布时间:2022-06-24 23:31:46

‘壹’ ubuntu cmake怎么指定编译

可以使用cmake --version 查看 如果输出 cmake的版本号说明已经正确安装了cmake 如果提示没有cmake这个命令,说明没有正确安装 下面给出安装cmake的步骤 可以直接在线安装:apt-get install cmake

‘贰’ make怎么指定编译器

Make 指定编译器

g++ -o sdmail_sv
sdmail_sv.o fk_comm_protocol.o fk_content_map.o fk_stat_manager.o fk_sendmail.o
fk_msgqueue.o fk_log.o soapC.o soapClient.o stdsoap2.o -lpthread
/home/zhy/program/gsoap-2.7/gsoap/libgsoap.a
fk_sendmail.o(.text+0xd9): In
function
`FK_SENDMAIL::sendMail(char*)':
/home/zhy/workspace/sendemail/fk_sendmail.cpp:217:
undefined reference to
`soap::soap()'
fk_sendmail.o(.text+0x237):/home/zhy/workspace/sendemail/fk_sendmail.cpp:267:
undefined reference to
`soap::~soap()'
fk_sendmail.o(.text+0x26a):/home/zhy/workspace/sendemail/fk_sendmail.cpp:267:
undefined reference to `soap::~soap()'
fk_sendmail.o(.text+0x49f): In
function `FK_SENDMAIL::sendMail(char const*, char
const*)':
/home/zhy/workspace/sendemail/fk_sendmail.cpp:161: undefined
reference to
`soap::soap()'
fk_sendmail.o(.text+0x5ee):/home/zhy/workspace/sendemail/fk_sendmail.cpp:211:
undefined reference to
`soap::~soap()'
fk_sendmail.o(.text+0x639):/home/zhy/workspace/sendemail/fk_sendmail.cpp:211:
undefined reference to `soap::~soap()'
fk_sendmail.o(.text+0x69f): In
function `FK_SENDMAIL::sendMail(char*,
int)':
/home/zhy/workspace/sendemail/fk_sendmail.cpp:81: undefined reference
to
`soap::soap()'
fk_sendmail.o(.text+0x76b):/home/zhy/workspace/sendemail/fk_sendmail.cpp:149:
undefined reference to
`soap::~soap()'
fk_sendmail.o(.text+0x9a4):/home/zhy/workspace/sendemail/fk_sendmail.cpp:149:
undefined reference to `soap::~soap()'
collect2: ld returned 1 exit
status
make: *** [sdmail_sv] ´íÎó 1
[root@C113563 sendemail]# make
clean
test -z "sdmail_sv" || rm -f sdmail_sv
rm -f *.o
[root@C113563
sendemail]# make

解决思路:
=========
nm libgsoap++.a
nm
libgsoap++.a | grep gsoap

=========
autoreconf -vif
make
clean
./configure --help
./configure CC=g++ CXX=g++
==一句搞定。指定.c文件的编译也用g++

‘叁’ 如何在makefile中指定所使用的编译器

可以使用定义变量来操作
比如定义变量CC
CC=gcc ->x86桌面版的编译器
CC= arm-linux-gcc ->arm版编译器

然后在makefile的编译命令中使用$(CC)就代表了你指定的编译器

‘肆’ 编译器如何指定cpu类型

只有完整的 Visual Studio 产品才支持此优化。
“目标 CPU”(C# 中为“平台目标”
)项目属性指定编译器是否应针对特定的 CPU 类型(如 64 位处理器)优化编译。
可以将目标平台设置为所有 CPU 类型或 x86、x64 或 Itanium 之类的特定 CPU 类型。
默认情况下,此选项设置为“AnyCPU”(C# 中为“Any CPU”
),以指定编译器不针对特定的 CPU 类型优化编译。
注意对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。

‘伍’ linux模块编译时,默认的编译器是什么怎么有时候指定了CC=arm-linux- 但是command里面没有用到CC

默认的编译器是gcc。
在linux 里 gcc 便是cc,两者是没区别的,gcc前面的g是代表GNU(至于GNU的意思,你可以查网络之类,关于linux的历史了)的意思。

假如如没有cc,你查下gcc有没有。假如没有,说明你装的是交叉编译工具arm-linux-gcc。
CC=arm-linux- 应该是 CC=arm-linux-gcc。
arm-linux-gcc 应该是用来编译嵌入式的。

‘陆’ 如何为qt指定编译器arm-xilinx-linux

修改$QTDIR/mkspecs目录下的符号链接default.将其指向linux-g++
$QTDIR是路径,具体要看你把QT装到什么地方和QT本身的版本,一般是/usr/lib[64]/qt4
修改default符号链接的作用是让qmake在生成Makefile的时候将Makefile文件中的编译器变量$CC与$CXX赋值成gcc和g++

‘柒’ 在编译uClinux的时候,他的编译器是自动选择的吗我只用了 make 命令,他就开始编译了!

你要制定编译器的话,肯定是在环境变量哪里设置好的。你之前安装的GCC也是设置好环境变量的哦

‘捌’ cmake 在Windows 命令行怎么指定编译器

CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。

准备活动:
(1)安装cmake。
下载地址:http://www.cmake.org/cmake/resources/software.html
根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。
Windows下CMake的使用
(2)运行cmake的方法。(GUI、命令行)
http://www.cmake.org/cmake/help/runningcmake.html

CMake使用步骤:
运行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
执行Configure:
运行之后,生成了如下文件:
Windows下CMake的使用
生成Makefile:
执行Generate之后生成如下文件:
Windows下CMake的使用
运行make进行编译:
Windows下CMake的使用
编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果:
Windows下CMake的使用
运行make install安装程序:
Windows下CMake的使用
运行make test进行测试:
Windows下CMake的使用

通过cmake tutorial学习CMake配置方法
http://www.cmake.org/cmake/help/cmake_tutorial.html
可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用编译产生的Turorial.exe,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。)
简单的程序编译。
(1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。
Windows下CMake的使用
(2)点击Configure,配置成功后,再点击Generate。
配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc.exe等编译器。
Windows下CMake的使用
(3)在build3目录执行make,就能够编译生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以运行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目录编译为库,并且链接到最终的可执行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目录MathFunctions也能被编译

# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
产生makefile:
在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。
编译:

‘玖’ 什么是编译器

编译器

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

[编辑]编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

一个现代编译器的主要工作流程如下:

* 源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)

工作原理

编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)

作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)

前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)

编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

阅读全文

与编译的时候指定编译器相关的资料

热点内容
mooc大学乐学python答案 浏览:408
怎么投诉途虎app 浏览:37
安卓重力感应怎么关 浏览:720
我的世界ios怎么建服务器地址 浏览:759
服务器端口ip都是什么意思 浏览:262
华为主题软件app怎么下 浏览:839
我们的图片能够收藏加密吗 浏览:978
mysql空值命令 浏览:213
python整点秒杀 浏览:882
怎么样互传app 浏览:293
python分布式抓包 浏览:36
轻量级php论坛 浏览:342
如何查看应用存储在哪个文件夹 浏览:436
app开发项目范围怎么写 浏览:76
androidjms 浏览:843
弹珠连贯解压 浏览:243
程序员的网课 浏览:904
广东加密狗防拷贝公司 浏览:450
rtf转换pdf 浏览:350
单片机退出中断 浏览:142