㈠ 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欄為空,還會彈出提示欄。