㈠ arino的编译器里怎样写一个空指令
直接给你代码:
定义
#define NOP do { __asm__ __volatile__ ("nop"); } while (0)
使用
NOP;
㈡ visual studio 编译器的堆空间不足问题的解决(cmake版本)
我们有个自动编译游戏引擎的脚本,这个脚本时间用久了,总是会报如下的错误:
fatal error C1060: 编译器的堆空间不足
每次出现这种错误,总是要请人重启机器,重新配置,很耽误时间和精力。
所以本人就在努力寻找一个彻底的解决办法。
想直接要解决方法的朋友可以跳过接下来的两节。
简单网上搜一下,就能搜到参考文献1。
如果你的c++工程不用cmake,参考文献1的方法足以满足你的需求。
但是我们工程比较大,肯定是要用cmake的,所以我就开始尝试各种方法: 通过改工程的cmake文件的方式来让cmake生成的vcxproj工程文件中包含PreferredToolArchitecture属性。
网上找了好久,试了不少办法,还是没用。
发现最终解决方案也是个很有趣的过程,值得记录。
首先我看见PreferredToolArchitecture父节点是PropertyGroup,而PropertyGroup下面有Platform属性,PreferredToolArchitecture和Platform是兄弟属性。
我们的Platform用x64还是win32,都是在cmake命令行里指定的。
所以我就大胆猜测,PreferredToolArchitecture这个属性如果可以通过cmake设置的话,大概率也是在cmake的命令行中设置!
接着,就是小心求证的过程,先执行: cmake --help
通过阅读帮助文档,辅以简单的排除法,我觉得toolset-name这个属性很可能是我要的,于是谷歌: cmake toolset name
从而找到了文档2,在文档2中发现了host=x64这个东西,但是我还不知道怎么用!于是继续搜索:cmake host=x64
找到了文档3,然后修改我们的编译脚本,加入这个编译选项,重新cmake,果然,出现了vcxproj文件中看到了PreferredToolArchitecture x64属性!
感觉成功了90%,编译工程,打开任务管理器,观察进程名称,发现c++编译器都是64位的,遂大功告成。
问题的本质就是windows操作系统visual studio的默认cpp编译器是32位的,所以最大内存是4G,就容易导致编译器内存不足。
有问题的cmake指令如下:
使用64位的cpp编译器的解决方法如下:
注意: cmake的GUI并没有-T host的选择,当然最新版的GUI可能也会加这个。。
还有另一种方法,添加环境变量: set PreferredToolArchitecture=x64
虽然用了64位的cpp编译器,过了一段时间,还是报堆空间不足的问题。
据观察,物理内存占用率100%,所以考虑利用空闲的磁盘空间,增大机器的虚拟内存。
win10如何设置虚拟内存的大小: https://jingyan..com/article/2fb0ba4041d14c00f3ec5f4e.html
物理内存只有32G,以前的虚拟内存是6G,我利用空闲磁盘,增大虚拟内存到100G!
㈢ C语言为什么在本地空指针用的了,到了网教编译器却提示空指针没有定义,把NULL改成‘\0’就可以了
怎么说呢,这个是我个人见解,如有不对请各位指点
对于指针在本地使用,操作系统要干很多事情,对于程序来说虚拟内存是关系最密切的,因此,每一个变量都是有意义,有根可寻的。当不进行指针初始化的话,很可能是一个野指针,操纵系统不会答应的。而网络编程发送的是数据流,他是写到buff里面的。你没有必要写一个0X0000 0000,毕竟写一个'\0'对面可以解析出来这个数据内容为0X0000 0000,这样不但省空间,而且表达的意思没有二义性,你觉得选择那个更好呢?
㈣ GCC编译器的参数与空格
按照INSTALL中的介绍,也是常用的方法,在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的
gcc改成arm-linux-gcc,编译器还是用的默认的gcc:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
./configure
–host=arm-linux
loading
cache
./config.cache
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(gcc
-O2
)
is
a
cross-compiler…
no
………………..
后来经过多次尝试,最后受默认的
CFLAGS=-O2
./configure
进行配置所启发,想到,是否可以将CC参数传入到configure中,
结果证实,如果没有自己的cache-file,即时加了对的CC参数,也还是无法传入:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–host=arm-linux
loading
cache
./config.cache
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(gcc
-O2
)
is
a
cross-compiler…
no
checking
whether
we
are
using
GNU
C…
(cached)
yes
………………..
而且,如果CC参数放在configure后面:
./configure
CC=arm-linux-gcc
则不能识别:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
./configure
CC=arm-linux-gcc
configure:
warning:
CC=arm-linux-gcc:
invalid
host
type
………………..
参数传递必须像
CFLAGS=-O2
./configure
一样,将参数设置放在configure的前面:
CC=arm-linux-gcc./configure
才能识别的。
必须要自己制定自己的cache-file
然后用./configure进行新配置,加上CC参数,才会即时生效,编译器才可以变成我们要的arm-linux-gcc:
[crifan@localhost
lrzsz-0.12.20]$
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
–prefix=/usr/crifan/lrzsz
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
………………..
否则,就无法将我们的CC参数传入了:
[crifan@localhost
lrzsz-0.12.20]$
CC=arm-linux-gcc
./configure
–prefix=/usr/crifan/lrzsz
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
)
works…
yes
checking
whether
the
C
compiler
(gcc
)
is
a
cross-compiler…
no
checking
whether
we
are
using
GNU
C…
(cached)
yes
………………..
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
loading
cache
cache_file_0
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
最好此处在加上–prefix=/usr/crifan/lrzsz,表示具体安装到哪里
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
–prefix=/usr/crifan/lrzsz
loading
cache
cache_file_0
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
………………..
其中,/usr/crifan/lrzsz是已经建立好的,已经存在的文件夹,上面这样表示编译后,
将生成的可执行文件安装拷贝到那个目录.
㈤ 我安装的codeblocks总是没编译器,怎么办
一般我们只是使用,不会对它的源代码做修改,因此选择release版本
之后可以看到针对各种操作系统的版本,一般大家用的是Windows版本,这里注意要选择后两个版本,第一个版本是不带编译器的,盲目选择第一个版本产生的后果后面再讲。
下载后直接双击安装就好了,注意安装界面中出现编译器选项,说明这个版本是自带编译器的
如果下载的是前面一步中的第一种,就是这样的安装界面,注意到它是不带编译器的,因此安装好后可能无法编译(除非你电脑上本来有编译器可以供CodeBlock使用)
下一步安装目录我没有选默认,而是自己改了目录,这样可能导致安装完后仍无法编译,但修改一下设置就可以解决了
安装完后首先到安装目录下看有没有装上编译器,如果没有这个文件夹你可能是安装的不带编译器的版本。。。
有上一步的这个文件夹但是仍然无法编译代码的话,是由于我们前面安装时更改了安装目录,而程序去默认的目录下(C盘)去找这个文件夹没找到就导致无法编译。解决方法很简单,打开软件,选择setting->Compiler
在编译器设置页面手动浏览找到MinGW文件夹,或选择autodetect,就可以完成编译器的设置,可以顺便将GNU GCC 设为默认编译器
编译成功的效果如下,如果不能编译则log栏为空,还会弹出提示栏。