當前位置:首頁 » 編程軟體 » 聯合編譯

聯合編譯

發布時間: 2022-01-24 07:18:00

㈠ 在linux下聯合編譯ffmpeg和SDL源碼之一 / 藍訊

看到個類似的問題:www.avidemux.org/smf/index.php?topic=11974.0你這個東西真不好說,不過看來是x264因為是靜態編譯,靜態編譯我記得需要別的函數庫也是靜態的。你這個應該是x264本身就有找不到的函數入口問題,導致現在傳染給了ffmpeg

java 同時編譯多個類的問題

可以javac 指令的參數-sourcepath指定源文件所在目錄(src),可以是一個或是多個;在同一個目錄下直接編譯主類就行。
請採納答案,支持我一下。

㈢ java 的聯合編譯問題

首先

  1. java中一個主類中只能有一個類聲明成public,你聲明了兩個,你應該將publicclassFamily中的public去掉。

  2. count=f.name(count);

    f.name(值);這個方法是將值賦給Family類型的對象f中屬性為name

    count不可能得到f.name()的值,類型不對一個String一個int;

你可以f.name(count);或f.name = count+"";

㈣ matlab c++ 聯合編譯 即使使用參數相關的查找,也未找到標識符

:
#include mex.h/*這個matlab自己的也是必須的*/
庫函數(4個參數)//名字忘了太長了
{
//自己的程序;
}
解釋:
matiab 的核心有pascal 到c
有了了很大的改進;不僅支持c /java等
我只用著2個;其他沒有用過;c++也支持;
自己查查函數手冊;舊知道了
增加以下:哪個函數為MexFuction(4參數)
{
//自己的代碼
}

㈤ 如何配置使用聯合編譯器incredibuild

1.make文件夾裡面的Gsm2.mak修改make工具的編譯項為IncredBuild增加運行參數
#@echo tools\make.exe -fmake\comp.mak -r -R COMPONENT=$* ... $(strip $(COMPLOGDIR))\$*.log
@if /I %OS% EQU WINDOWS_NT \
(if /I $(BM_NEW) EQU TRUE \
(XGConsole /command="tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1" /NOLOGO /profile="tools\XGConsole.xml") \
else \
(XGConsole /command="tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1" /NOLOGO /profile="tools\XGConsole.xml") \
) \
else \
(if /I $(BM_NEW) EQU TRUE \
(tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
else \
(tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
)
@type $(strip $(COMPLOGDIR))\$*.log >> $(LOG)
@perl .\tools\chk_lib_err_warn.pl $(strip $(COMPLOGDIR))\$*.log

2.tools工具夾裡面加入 XGConsole.xml
內容為
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
<Tool Filename="perl" AllowRemote="true" />
<Tool Filename="make" AllowIntercept="true" />
<Tool Filename="tcc" AllowRemote="true" />
<Tool Filename="tcpp" AllowRemote="true" />
<Tool Filename="armcc" AllowRemote="true" />
<Tool Filename="armcpp" AllowRemote="true" />
<Tool Filename="strcmpex" AllowRemote="true" />
<Tool Filename="warp" AllowRemote="true" />
<Tool Filename="armar" AllowRemote="false" />
<Tool Filename="formelf" AllowRemote="false" />
</Tools>
</Profile>

3.tools工具夾裡面的make2.pl修改以下幾行
if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
}
}
}
改為
if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} >= 1) {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}"."0";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}"."0";
}
}
}
$ENV{"NUMBER_OF_PROCESSORS"} = 10; //修改為你想要的進程數
4.把tools裡面的make.exe換成多任務的文件。

㈥ java 聯合編譯 的問題

你必須在包在最外面進行編譯,系統會自動將相關聯的編譯
比如說A類在包a中,B類在包b中,那麼你編譯時,目錄應該在a目錄之外,這樣你編譯時使用
javac a/A.java
就會級聯編譯了

㈦ 如何在java中實現c語言中的聯合的功能

用類, 只有這樣。
class DateE{
long ul[2];
int ui[4];
byte uc[8];

//get/set方法

}

java沒有 unsigned long,如果數很大就換成BigDecimal
,或 BigInteger

㈧ incredibuild為什麼只有一個cpu在編譯

IncrediBuild是一款分布式編程開發工具,能夠加速C/C++ 的編譯和創建。特別是在大型C/C++項目中,採用IncrediBuild的多線程處理技術,不必改變項目文件的代碼,在編譯過程中自動查找區域網中空閑的CPU,並將源文件發到空閑CPU一起編譯,加快項目90%的編譯速度。
IncrediBuild需要分別在服務端(Coordinator)和客戶端(Agent)進行安裝。
1、服務端(Coordinator)的安裝
運行IncrediBuild安裝程序,選擇Install IncrediBuild,點擊Next下一步,繼續下一步,在安裝組件選擇窗口(Component Selection)鉤選IncrediBuild Coordinator。安裝組件選擇窗口,還可以不選擇服務端參與編譯,把IncrediBuild Agent前的鉤點掉就可以了。

繼續下一步,選擇安裝路徑和使用的一些埠號。參與編譯的CPU數等。然後IncrediBuild的服務端就安裝好了。
2、客戶端(Agent)的安裝
在其它的電腦上,運行IncrediBuild的安裝程序,運行到安裝組件選擇(Component Selection),只鉤選IncrediBuild Agnet並下一步。

選擇安裝路徑,並下一步,填寫服務端的IP地址和埠號。

點擊下一步,會與伺服器進行驗證。然後設置一下編譯通訊的埠等,然後選擇參與編譯的CPU數,最後點擊安裝。
以上伺服器與客戶端都安裝完成。在CoordinatorMonitor中可以看到各成員的狀態。

打開VS在菜單欄上多出了一項IncrediBuild的選項。這樣就可以在「IncrediBuild」菜單下進行聯合編譯了。

編譯界面如下圖:

㈨ android系統編譯能用分布式編譯嗎

項目越來越大,每次需要重新編譯整個項目都是一件很浪費時間的事情。Research了一下,找到以下可以幫助提高速度的方法,總結一下。
1. 使用tmpfs來代替部分IO讀寫
2.ccache,可以將ccache的緩存文件設置在tmpfs上,但是這樣的話,每次開機後,ccache的緩存文件會丟失
3.distcc,多機器編譯
4.將屏幕輸出列印到內存文件或者/dev/null中,避免終端設備(慢速設備)拖慢速度。

tmpfs
有人說在Windows下用了RAMDisk把一個項目編譯時間從4.5小時減少到了5分鍾,也許這個數字是有點誇張了,不過粗想想,把文件放到內存上做編譯應該是比在磁碟上快多了吧,尤其如果編譯器需要生成很多臨時文件的話。
這個做法的實現成本最低,在Linux中,直接mount一個tmpfs就可以了。而且對所編譯的工程沒有任何要求,也不用改動編譯環境。
mount -t tmpfs tmpfs ~/build -o size=1G
用2.6.32.2的Linux Kernel來測試一下編譯速度:
用物理磁碟:40分16秒
用tmpfs:39分56秒
呃……沒什麼變化。看來編譯慢很大程度上瓶頸並不在IO上面。但對於一個實際項目來說,編譯過程中可能還會有打包等IO密集的操作,所以只要可能,用tmpfs是有益無害的。當然對於大項目來說,你需要有足夠的內存才能負擔得起這個tmpfs的開銷。
make -j
既然IO不是瓶頸,那CPU就應該是一個影響編譯速度的重要因素了。
用make -j帶一個參數,可以把項目在進行並行編譯,比如在一台雙核的機器上,完全可以用make -j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。
還是用Kernel來測試:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
由此看來,在多核CPU上,適當的進行並行編譯還是可以明顯提高編譯速度的。但並行的任務不宜太多,一般是以CPU的核心數目的兩倍為宜。
不過這個方案不是完全沒有cost的,如果項目的Makefile不規范,沒有正確的設置好依賴關系,並行編譯的結果就是編譯不能正常進行。如果依賴關系設置過於保守,則可能本身編譯的可並行度就下降了,也不能取得最佳的效果。
ccache
ccache工作原理:
ccache也是一個編譯器驅動器。第一趟編譯時ccache緩存了GCC的「-E」輸出、編譯選項以及.o文件到$HOME/.ccache。第二次編譯時盡量利用緩存,必要時更新緩存。所以即使"make clean; make"也能從中獲得好處。ccache是經過仔細編寫的,確保了與直接使用GCC獲得完全相同的輸出。

ccache用於把編譯的中間結果進行緩存,以便在再次編譯的時候可以節省時間。這對於玩Kernel來說實在是再好不過了,因為經常需要修改一些Kernel的代碼,然後再重新編譯,而這兩次編譯大部分東西可能都沒有發生變化。對於平時開發項目來說,也是一樣。為什麼不是直接用make所支持的增量編譯呢?還是因為現實中,因為Makefile的不規范,很可能這種「聰明」的方案根本不能正常工作,只有每次make clean再make才行。
安裝完ccache後,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,鏈到/usr/bin/ccache上。總之確認系統在調用gcc等命令時會調用到ccache就可以了(通常情況下/usr/local /bin會在PATH中排在/usr/bin前面)。
安裝的另外一種方法:
vi ~/.bash_profile
把/usr/lib/ccache/bin路徑加到PATH下
PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin
這樣每次啟動g++的時候都會啟動/usr/lib/ccache/bin/g++,而不會啟動/usr/bin/g++
效果跟使用命令行ccache g++效果一樣
這樣每次用戶登錄時,使用g++編譯器時會自動啟動ccache
繼續測試:
用ccache的第一次編譯(make -j4):23分38秒
用ccache的第二次編譯(make -j4):8分48秒
用ccache的第三次編譯(修改若干配置,make -j4):23分48秒

看來修改配置(我改了CPU類型...)對ccache的影響是很大的,因為基本頭文件發生變化後,就導致所有緩存數據都無效了,必須重頭來做。但如果只是修改一些.c文件的代碼,ccache的效果還是相當明顯的。而且使用ccache對項目沒有特別的依賴,布署成本很低,這在日常工作中很實用。
可以用ccache -s來查看cache的使用和命中情況:
cache directory /home/lifanxi/.ccachecache hit 7165cache miss 14283called for link 71not a C/C++ file 120no input file 3045files in cache 28566cache size 81.7 Mbytesmax cache size 976.6 Mbytes
可以看到,顯然只有第二編次譯時cache命中了,cache miss是第一次和第三次編譯帶來的。兩次cache佔用了81.7M的磁碟,還是完全可以接受的。
distcc
一台機器的能力有限,可以聯合多台電腦一起來編譯。這在公司的日常開發中也是可行的,因為可能每個開發人員都有自己的開發編譯環境,它們的編譯器版本一般是一致的,公司的網路也通常具有較好的性能。這時就是distcc大顯身手的時候了。
使用distcc,並不像想像中那樣要求每台電腦都具有完全一致的環境,它只要求源代碼可以用make -j並行編譯,並且參與分布式編譯的電腦系統中具有相同的編譯器。因為它的原理只是把預處理好的源文件分發到多台計算機上,預處理、編譯後的目標文件的鏈接和其它除編譯以外的工作仍然是在發起編譯的主控電腦上完成,所以只要求發起編譯的那台機器具備一套完整的編譯環境就可以了。
distcc安裝後,可以啟動一下它的服務:
/usr/bin/distccd --daemon --allow 10.64.0.0/16
默認的3632埠允許來自同一個網路的distcc連接。
然後設置一下DISTCC_HOSTS環境變數,設置可以參與編譯的機器列表。通常localhost也參與編譯,但如果可以參與編譯的機器很多,則可以把localhost從這個列表中去掉,這樣本機就完全只是進行預處理、分發和鏈接了,編譯都在別的機器上完成。因為機器很多時,localhost的處理負擔很重,所以它就不再「兼職」編譯了。
export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"
然後與ccache類似把g++,gcc等常用的命令鏈接到/usr/bin/distcc上就可以了。
在make的時候,也必須用-j參數,一般是參數可以用所有參用編譯的計算機CPU內核總數的兩倍做為並行的任務數。
同樣測試一下:
一台雙核計算機,make -j4:23分16秒
兩台雙核計算機,make -j4:16分40秒
兩台雙核計算機,make -j8:15分49秒
跟最開始用一台雙核時的23分鍾相比,還是快了不少的。如果有更多的計算機加入,也可以得到更好的效果。
在編譯過程中可以用distccmon-text來查看編譯任務的分配情況。distcc也可以與ccache同時使用,通過設置一個環境變數就可以做到,非常方便。
總結一下:
tmpfs: 解決IO瓶頸,充分利用本機內存資源
make -j: 充分利用本機計算資源
distcc: 利用多台計算機資源
ccache: 減少重復編譯相同代碼的時間
這些工具的好處都在於布署的成本相對較低,綜合利用這些工具,就可以輕輕鬆鬆的節省相當可觀的時間。上面介紹的都是這些工具最基本的用法,更多的用法可以參考它們各自的man page。
5.還有提速方法是把屏幕輸出重定向到內存文件或/dev/null,因對終端設備(慢速設備)的阻塞寫操作也會拖慢速度。推薦內存文件,這樣發生錯誤時,能夠查看。

㈩ C語言中聯合體(union)的使用

uniuon data{ int i ; char c ;float f;}x;
定義了一個結合體名叫x 裡麵包含了int型變數i,char類型c,float類型變數f
int y;這是聲明的一個變數

熱點內容
最近上傳視頻 發布:2024-12-25 21:05:39 瀏覽:393
php招聘源碼 發布:2024-12-25 21:05:38 瀏覽:988
c語言輸入數組賦值 發布:2024-12-25 21:01:43 瀏覽:652
22款賓士e買哪個配置 發布:2024-12-25 20:54:08 瀏覽:737
金鏟鏟之戰怎麼看之前的伺服器 發布:2024-12-25 20:52:36 瀏覽:448
unix環境高級編程英文版 發布:2024-12-25 20:50:35 瀏覽:291
我的世界電腦版伺服器如何改實驗模式 發布:2024-12-25 20:41:57 瀏覽:129
資料庫刪過程 發布:2024-12-25 20:39:38 瀏覽:447
創建sql存儲過程 發布:2024-12-25 20:29:14 瀏覽:531
python目錄存在 發布:2024-12-25 20:18:51 瀏覽:672