当前位置:首页 » 编程软件 » 编译ccl

编译ccl

发布时间: 2022-05-25 12:26:11

‘壹’ 如何直接运行cl.exe进行C++文件编辑编译

哦,这个要设置环境变量的。
比如你要编译的文件是 test.c

cl test.c
就直接生成test.exe了,很方便,不用像GUI那里会生成pch杂七杂八一大堆文件。

环境变量这样设置

set ROOT=D:\VS2012

set include=%ROOT%\include
set lib=%ROOT%\lib
set PATH=%PATH%;%ROOT%\bin

‘贰’ 如何编译生成dll

使用VC下的cl和link手工创建dll并实现函数导入

1、创建dll头文件:
/*
* dllmain.h
*/
#ifndef _DLLMAIN_H
#define _DLLMAIN_H

int getNumber();

#endif

2、创建dll源文件:
/*
* dllmain.c
*/
#include "dllmain.h"

int getNumber()
{
return 10;
}

3、 创建def文件:
; export.def
LIBRARY MY_DLLMAIN ; MY_DLLMAIN 将成为生成的dll的名称
EXPORTS
getNumber @1 ; 这个名称即为函数的实际导出名称 @1为函数的导出编号

4、生成dll文件:
cl dllmain.c /c
link /def:export.def /dll dllmain.obj

这时,工程中已经包含了 dllmain.h dllmain.c export.def dllmain.obj dllmain.lib dllmain.exp MY_DLLMAIN.dll 其中,后4个文件是编译链接过程中生成的文件

5、创建dlltest.c:
/*
* dlltest.c
*/
#include <stdio.h>
#include "dllmain.h" //dll库的头文件

#pragma comment(lib,"dllmain.lib") //dllmain.lib即是上一步生成的文件

int main()
{
printf("%dn",getNumber());
}

6、编译、链接dlltest.c
cl dlltest.c /c
link dlltest.obj

注意:这里dllmain.lib和dllmain.h应该和dlltest.c在同一个目录中。此步的结果将生成 dlltest.exe

7、运行:
dlltest

这时,系统将载入my_dllmain.dll这个动态链接库,将调用其中的getNubmer函数。

‘叁’ linux Makefile问题.S.s: $(CPP) $(CFLAGS) $< -o $*.s什么意思

请慢慢看,真要详细讲起来,文字实在太多了,但是由于时间原因,我只能以粗略的文字讲,语言有一些逻辑漏洞,请见谅。

首先我会以粗略的文字回答你的其中一个问题,然后后面会给出第二个问题的答案。
问:什么时候会执行这些规则及其相对应的命令?
答:当你给make命令指定了它要生成的终极目标时,它会从要生成的终极目标寻址依赖的依赖条件,然后依赖条件一级一级的查找并执行相对应的命令。即如果当有目标需要.s、.o这些依赖条件的时候,会取找要生成.s、.o目标的依赖条件,这个时候就会执行这些规则:
.S.s:
$(CPP) $(CFLAGS) $< -o $*.s
.S.o:
$(CC) $(CFLAGS) -c $< -o $*.o
.c.o:
$(CC) $(CFLAGS) -c $< -o $*.o

一、
源代码文件必须经过:预处理(cpp)、编译(ccl)、汇编(as)、链接(ld)。这四个阶段最终才得到可执行的程序:
makefile里定义了变量CPP=cpp;其中$(CPP)的意思是去定义变量CPP里的值:cpp,用cpp来预处理源文件。
$(CFLAGS)的意思是取定义变量CDLAGS里面的值,一般是一些自我定义的预处理命令和编译命令的参数。
$<的意思是:在规则的命令中,表示第一个依赖条件
-o是一个预处理、编译等执行命令需要的参数
/*
其实这条命令:$(CPP) $(CFLAGS) $< -o $*.s,就是一条预处理命令,将一个源文件预处理为.s文件后缀的文件,*为通配符。那源文件在哪里呢。其实这条命令.S.s: 已经说了以.S结尾的文件就是源文件。那这条命令.S.s这么说了呢?请看下面的后缀规则讲解。
*/

二、
老式风格的"后缀规则"
后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本的Makefile兼容,GNU make同样兼容于这些东西。后缀规则有两种方式:"双后缀"和"单后缀"。

双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀。如".c.o"相当于"%o : %c"。单后缀规则只定义一个后缀,也就是源文件的后缀。

后缀规则中所定义的后缀应该是make所认识的,如果一个后缀是make所认识的,那么这个规则就是单后缀规则,而如果两个连在一起的后缀都被make所认识,那就是双后缀规则。例如:".c"和".o"都是make所知道。
因而,如果你定义了一个规则是".c.o"那么其就是双后缀规则,意义就是".c" 是源文件的后缀,".o"是目标文件的后缀。如下示例:
.c.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

其中.c.o:这个命令表示源文件的后缀为.c,目标文件的后缀为.o;即也可理解为:生成.o的目标文件依赖条件是源文件.c
下面命令是将是所有的.c源文件都编译成.o的目标文件。
注:后缀规则不允许任何的依赖文件,如果有依赖文件的话,那就不是后缀规则,那些后缀统统被认为是文件名,
如:
.c.o: foo.h
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

这个例子,就是说,文件".c.o"依赖于文件"foo.h",而不是我们想要的这样:

%.o: %.c foo.h
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
因此后缀规则不允许任何的依赖文件。

‘肆’ 在虚拟机上安装了ubuntu,在ubuntu上安装OpenCV-2.4.0,编译有问题。

ubuntu并没包含完整的编译工具,必须自己先安装好。个人建议先装好各种工具。
先装下这个东西。这个东西是gcc必须的。
sudo apt-get install build-essential

如果不够请整体复制下列命令,看显示,缺啥补啥

cat > version-check.sh << "EOF"
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -e /usr/bin/yacc ];
then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
else echo "yacc not found"; fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -e /usr/bin/awk ];
then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
else echo "awk not found"; fi

gcc --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
echo "Texinfo: `makeinfo --version | head -n1`"
xz --version | head -n1

echo 'main(){}' > mmy.c && gcc -o mmy mmy.c
if [ -x mmy ]
then echo "gcc compilation OK";
else echo "gcc compilation failed"; fi
rm -f mmy.c mmy

EOF

bash version-check.sh

‘伍’ lisp有什么比较好用的编译器么

因为编译器只是个命令工具没什么叫"好用"的...我假设你问的是"编辑器"而不是"编译器":
首先, 你问的是哪种lisp, 因为lisp有很多种.
如果你需要对所有lisp都好用的编辑器, 估计只有emacs和vim可以满足你要求. 如果只要最常见的那些lisp, 除了这两个一般都有些专门为他优化的插件支持的编辑器, 比如 clojure有lighttable和nightcode, racket 有GRacket 等

如果你真的问的是编译器的话, 请具体说是哪种lisp,因为不同的lisp编译器是完全不一样的, 比如common lisp 我是喜欢 ccl (很多人更喜欢sbcl), 比如scheme的话显然chez是最好得编译器

‘陆’ cmd调用gcc编译c源码,并传参

下面将通过对一个程序的编译来演示整个过程。

1
2
3
4
5
6
7

#include <stdio.h>

int main()
{
printf("happy new year!\n");
return 0;
}


1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。
命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i
2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了
一条低级机器语言指令。

‘柒’ 请问如何用VC++的编译器编译C的程序

启动VC++6.0新建一个Win32 Console Application工程,建好后,新建-文件-C++ source File,在头部加上
#include <stdio.h>
#include <stdlib.h>
然后就可以编译C语言写的了

‘捌’ 怎样在VC6中生成汇编文件

VC6.0中,设置如下:project=》setting...=》C/C++


Category选择ListingFiles


Listingfiletype选择下拉框

Assembly-OnlyListing仅生成汇编代码文件(.ASM扩展名);

AssemblyWithMachineCode生成机器代码和汇编代码文件(.COD扩展名);AssemblyWithSourceCode生成源代码和汇编代码文件(.ASM扩展名);Assembly,MachineCode,andSource生成机器码、源代码和汇编代码文件(.COD扩展名)。


Listingfilename为生成的信息文件的路径,一般为Debug或Release目录下,生成的文件名自动取源文件的文件名。


设置好的示例图:


设置完重新编译,在工程Debug文件夹下就产生对应的汇编代码 *.asm

‘玖’ 为什么我的linux系统找不到ccl这个编译器

执行gcc -v命令,如果Linux系统没有安装gcc编译器,会提示Command not found(没有这个命令),如果系统上安装了gcc编译器,这条命令就会显示出当前安装的gcc编译器是哪个版本。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:645
制作脚本网站 发布:2025-10-20 08:17:34 浏览:936
python中的init方法 发布:2025-10-20 08:17:33 浏览:632
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:821
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:731
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1066
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:299
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:160
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:852
python股票数据获取 发布:2025-10-20 07:39:44 浏览:763