2018年6月19日火曜日

[OpenCV] Cross Compiling OpenCV with non-free modules for Linux ARM


最近 Ubuntu 用的比較習慣,所以這次還是使用 Ubuntu 來做 cross compiling。

這次一樣又很偷懶直接拿一台現有的機器來試試看

為了方便起見,這次用 ubuntu 18.04 x64 的系統

直接抓 opencv master branch 下來做。

至於為什麼要做 master branch ...

好像沒有為什麼,就是偷懶不想花時間去找其他版本來用XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 18.04 x64系統的版本都好
2. Ubuntu 18.04 x64 系統映像檔

然後用預設的方式安裝系統

在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

雖然其實做了也不影響就是ww

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal, ctrl + alt + T)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD

安裝必要的套件

$ sudo apt-get install git repo bison build-essential zip curl cmake
$ sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

建立工作路徑

$ mkdir -p <work_directory>/opencv_build
$ cd <work_directory>/opencv_build

把 OpenCV master 分支的 source 抓下來

$ git clone https://github.com/Itseez/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

除了抓 opencv 的 source 之外

non-free 模組是另外的放的

所以才要在把 opencv_contrib 抓下來

建置 OpenCV master 分支

在建置之前先建立一下輸出路徑
$ mkdir -p build
$ cd build

如果不需要 non-free 模組就執行下面這行
$ cmake -DSOFTFP=ON  -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake ../opencv

如果需要 non-free 模組就執行下面這行
$ cmake -DSOFTFP=ON  -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv

最後就是建置啦
$ make
$ make install


基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 install 資料夾下

如果資料夾下有東西的話

應該就是有正常結束了

=====


相關來源:

Building / Cross Compiling OpenCV for Linux ARM
http://www.ridgesolutions.ie/index.php/2013/05/24/building-cross-compiling-opencv-for-linux-arm/

Repository for OpenCV's extra modules
https://github.com/opencv/opencv_contrib

2018年5月27日日曜日

[AOSP] 用 Ubuntu 18.04 建立 Android 系統建置環境


在 Ubuntu 上使用 AOSP(Android Open Source Project) 編譯 android 系統

過了好多年,從之前的 ubuntu 14.04 到現在的 ubuntu 18.04

AOSP 都從 5.x 進化到 8.x 了

感覺現在連建置都變簡單了

所以只好再打一篇來記錄一下

之前好像還要打些什麼的

不過內容太多了就懶的寫了

這篇也偷懶直接複製之前的來修改w

所以這篇依然是 AOSP 的 master 的建置



為了減少除錯的時間同樣這次直接使用乾淨的系統(。-_-。)

手邊好像也沒有多餘的機器所以直接開 VM 來做...

等預算夠再來搞一台實體機好了XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 18.04 x64系統的版本都好
2. Ubuntu 18.04 x64 系統映像檔


然後用預設的方式安裝系統

雖然說是預設...

但是根據上面的夠強大的硬體...

基本上有三個東西要調整...

一個叫做 CPU

一個叫做 記憶體

一個叫做 硬碟

CPU 可能的話請給到 2 個核心以上

記憶體如果可能的話請給到 8GB 以上

硬碟容量分配無論如何請不要小於 100GB ← \_(・ω・`)ココ重要!

因為實際整個建置完之後的系統容量就超過 80G 了


在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

雖然其實做了也不影響就是ww

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal, ctrl + alt + T)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD



安裝必要的套件

$ sudo apt-get install git repo gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils software-properties-common xsltproc libx11-dev:i386 liblz4-tool android-tools-adb android-tools-fastboot google-android-build-tools-installer bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev make optipng maven python-mako python3-mako python python3 syslinux-utils

安裝 OpenJDK

和之前不同的是,這次只需要 OpenJDK 就行了
$ sudo apt-get install openjdk-8-jdk

設定 git/repo

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ git config --global user.email "android"
$ git config --global user.name "android"

user.email 和 user.name 的 "android"可以是任意的名稱

所以隨意就好XD

設定環境變數


再來就是要 build 整個專案了...

在 AOSP 中有許多分支

這裡只記錄 master 分支 (現時點的AOSP master 分支版本為 8.1)

這邊跟之前的不一樣,這次不再需要對 JAVA 做設定了

所以這個步驟可以直接跳過(*^▽^*)


把 AOSP master 分支的 source 抓下來

這邊要注意的是 source 很多而且很大...

所以下完指令後就可以去睡覺了...XD
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync -j8
這裡的 sync 的參數 -j8 是根據現在正在執行這個指令的電腦的CPU資源決定的

可以不寫讓它用預設的方式執行也可以

8 指的是現在這台電腦的核心數

理論上越多就越快...

所以也可以給 -j16 或 -j24 之類的數字

沒那麼多的話給 -j2 或 -j4 也可以XD



建置 AOSP master 分支

再建置之前先重新讀取資源
$ source build/envsetup.sh

再來就是執行建置的動作啦...
$ lunch aosp_arm-eng
$ make -j8
至於選擇 aosp_arm-eng 則是因為現在手機大部分都是這個規格XD

其實這還有其他選項就是了...

有興趣可以直接下 lunch 指令看XD

而這裡的 -j8 和 上面的 -j8 是一樣的意思

不過個人的習慣是 8G 的記憶體會給 -j4 然後 4G 的記憶體會給 -j2

至於為什麼o(‧"‧)o...好像也沒為什麼...就只是壞習慣而已XD

然後因為 android 是個巨大的專案...

所以下完 make 指令之後又可以去睡覺了...(´▽`*)

另外題外話一下

根據網路上找到的資料是用 intel xeon 8C16T 的 CPU 配 24GB 的記憶體

建置需要花 37 分鐘的時間

然後這次我拿 intel m7-6y75 開 VM 分資源 2C2T 的 CPU 配 8G 的記憶體

建置花了超過 9.5 個小時...Σ(゚д゚) エッ!?

用 AMD R7-1700 開 VM 分資源 8C8T 的 CPU 配 8G 的記憶體

只要 1 個小時 50 分鐘就結束了。

看來選 CPU 是一件很重要的事ww



基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 out/target/product/generic 資料夾下

最重要的有 system.img、userdata.img 和  ramdisk.img 三個映像檔

一定要確認這三個檔案有沒有存在...XD


最後就是把好不容易建好的系統放到模擬器上面執行了...


模擬測試

$ emulator

嗯...就這麼一個指令而已XD

然後就慢慢等模擬器自己動作了XD

沒意外的話就會在模擬器上面看到自己建置的 Android 系統了XD

有意外的話就只好慢慢 debug 啦~~(σ≧▽≦)σ

...

其實一定會有意外啦....ε=ε=┏( >_<)┛

因為模擬器預設的資源非常少...

所以會一直 crash 或是運作不順之類的XD

其實還有很多東西要設定...

不過這篇主要是在寫環境建置

所以模擬器設定就省略不寫了XD


=====


相關來源:

android - building the system
https://source.android.com/source/building.html

2017年12月20日水曜日

[C/C++] 點陣 bitmap 的 header 格式

這篇沒什麼特別的內容。

只是記錄一下 1 bit 的點陣圖格式。

B/W 1 bit 的點陣圖 header 是 62 Bytes 不是 64 Bytes。

#pragma pack(push, 1)

typedef struct tagBITMAPHEADER

{

WORD type;
DWORD bmp_file_size;
WORD reserved_1;
WORD reserved_2;
DWORD offset;


DWORD header_size; // 40 bytes
DWORD bmp_width;
DWORD bmp_height;
WORD plane;
WORD bpp;
DWORD compression; // 0
DWORD raw_data_size;
DWORD ppm_x;
DWORD ppm_y;
DWORD  biClrUsed;         // colors used
DWORD  biClrImportant;    // important colors

 // Palette Data 8 Bytes
DWORD palette_data_1; // 0x000000
DWORD palette_data_2; // 0xFFFFFF

} BITMAPHEADER;

#pragma pack(pop)





2017年5月19日金曜日

[Windows] 幫自己的exe檔建立自己的數位簽章

這篇只做快速產生數位簽章的方法,其他原理跟理論和規則什麼都就不寫了。

所以這篇只會有幾個指令而已。

首先會需要一些工具。
這個簽證工具在 windows sdk 裡面。
所以先下載個 sdk 套件
Windows Software Development Kit (SDK) for Windows 8
https://dev.windows.com/en-us/downloads/windows-8-sdk

雖然他寫 for Windows 8
不過基本上 windows 8.1 10 也都適用
或是不放心一定要用 windows 10 SDK 也是可以
Windows 10 SDK
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

然後就是製作數位簽章了
就只有3行指令

makecert -a sha1 -b 01/01/2003 -e 12/31/2099 -cy authority -eku 1.3.6.1.5.5.7.3.3 -sv myCA.pvk -r -n "CN=my_name, E=mail@domain.com" myCA.cer
cert2spc myCA.cer myCA.spc
pvk2pfx -pvk myCA.pvk -spc myCA.spc -po 1234 -pfx myCA.pfx -f

做好之後中間那些檔案都不重要了
只要有最後產生的 pfx 檔就可以進行簽證了

所以接著就是幫 exe 檔簽證
指令只有1個
但是因為 sha1 已經停了
所以還要再加簽一個 sha256
所以就變成了2行指令

signtool sign /f myCA.pfx /p 1234 /t http://timestamp.verisign.com/scripts/timstamp.dll /v "filename.exe"
signtool sign /fd sha256 /f myCA.pfx /p 1234 /as /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "filename.exe"

然後程式的屬性中就會出現數位簽章的標籤了

因為剛剛簽證做了2次
第一次是 sha1
第二次是 sha256
所以看起來會像下面這張圖這樣


然後點進去詳細裡面
就可以看到剛剛製作 CA 的時候自己設定 CN 這個選項的結果了


大致上數位簽章這樣就完成了
但比較重要的一點
因為這個是沒有經過認證的簽章
所以它還是有可能會被當作不安全的簽章


相關來源:

HowTo: Create self-signed certificates with MakeCert
http://www.virtues.it/2015/08/howto-create-selfsigned-certificates-with-makecert/

[デジタル署名]2016年以降のハッシュアルゴリズムSHA-1廃止について
http://qiita.com/yaju/items/b9b5f06d875d7ef52a9e

Signtoolでの署名方法
https://knowledge.symantec.com/jp/support/bms-support/index?vproductcat=BMS&vdomain=VERISIGN.JP&page=content&id=SO23053&actp=LIST&viewlocale=ja_JP&locale=ja_JP&redirected=true

VisualStudioを入れずに自己署名環境を作る
https://chai99.wordpress.com/2007/10/08/visualstudio%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9A%E3%81%AB%E8%87%AA%E5%B7%B1%E7%BD%B2%E5%90%8D%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B/

VisualStudioを入れずに自己署名環境を作る
http://d.hatena.ne.jp/chai99/20071008/1191824241


2016年10月27日木曜日

[作業系統] Windows 7 x64 無法正常更新

這篇記錄一下 win 7 x64 在安裝完後,那該死的 Windows Update 一直卡在 檢查更新...

不知道微軟在搞什麼系統越做越神奇了

Windows 10 都出了那麼久了

Windows 7 就算要放棄也不要故意搞得那麼糟糕呀= =

就像下面這張圖這樣

足足等了 72 小時它依然還在檢查那不知道是有多重要的更新

這根本就是壞掉了吧...(´・ω・`)


↑ 正在檢查更新...

試過了一堆有的沒的方法

最後竟然要下載補丁= =

KB3102810:x64 系統的 Windows 7 更新
https://www.microsoft.com/zh-TW/download/details.aspx?id=49540

然後依然是等很久的檢查更新

但是終於會動了!!


2016年9月28日水曜日

[開發環境] 用 VirtualBox 5.0 在 Windows 7 x64 下使用 Intel Fortran Compiler 及 MPICH 建立 MPI 開發編譯及執行環境


這篇其實挺複雜的,再加上因為時間不怎麼多,所以就只記錄重點了。
這篇主要內容是一個指定要開 16 個 processes 的 fortran 程式,
然後用 MPI 來分散處理 16 個 processes。

要準備的東西

1. VirtualBox 5.0 以上的版本
2. Windows 7 x64 的 iso 檔
3. Intel Fortran Compiler 2016...這個是要錢的,但學生有免費的可以用
4. MPICH2 1.4.1p1
5. Visual Studio 2015...因為 Intel Fortran 跟 VS 有一腿,所以這也是必需品



建置步驟

1. 用 VirtrualBox 建立一台 Windows 7 x64 的虛擬機
2. 安裝 Visual Studio 2015
3. 安裝 Intel Parallel Studio XE 2016
4. 安裝 MPICH 1.4.1p1


用 VirtrualBox 建立一台 Windows 7 x64 的虛擬機
既然要做 MPI 當然就要有很多台電腦。
不過這次的需求沒那麼高,所以只建台虛擬機來用。
當然要建多台也是可以,做法都一樣,所以這邊就不做多台了。

1. 建立新的虛擬機器



↑ 按 [New] 建立一台虛擬機


↑ 隨便取個可以用的名字


↑ 幫它配置記憶體,這邊因為要用 1 台來處理 16 個 processes 所以記憶體就必須要給超大


↑ 選第二個,弄顆新的虛擬硬碟出來


↑ 為了方便就用 VDI 形式就好


↑ 用動態的大小可以避免一次占用掉太多的實體硬碟空間


↑ 中間右邊的按鈕可以選擇 vdi 映像檔存放的路徑,至於大小反正都動態了,就乾脆給大一點


↑ 按[設定]進行更多的設定


↑ 設定顯示用的記憶體大小能越大當然是越好


↑ 設定 CPU 核心數能越多也越好


2. 安裝 Windows 7 x64


就找一個 Windows 7 的 iso 檔自己裝吧...
這部分基本上比較簡單所以就讓我省略吧...w
本來是想這麼說啦...
可是後來想想還是把它補完好了OTL


↑ 找到要被安裝的windows ISO檔


↑ 然後啟動它


↑ 之後就會看到讀取的光棒 然後慢慢等


↑ 再來就會看到安裝 windows 的畫面了 正常應該可以直接下一步


↑ 然後應該也只有 [立即安裝] 的選項可以按了


↑ 慢慢等安裝程式啟動


↑ 然後把根本沒在看的合約打勾 就可以繼續下一步了


↑ 這是一台全新的電腦 所以只能選下面的[自訂]


↑ 接著要分割硬碟 按一下 [磁碟機選項 (進階)]


↑ 按一下 [新增]


↑ 因為我很懶惰不想再分割其他硬碟 所以就直接按 [套用] 了


↑ 然後按 [確定]


↑ 就會看到一個系統保留的空間跟一個空硬碟 然後按 [下一步]


↑ 到這裡就可以慢慢等了


↑ 等這裡跑完之後會自動重開機


↑ 來不及擷取畫面就被重開機了OTL


↑等安裝程式慢慢更新設定


↑ 等安裝程式慢慢啟動服務


↑ 等安裝完成


↑ 等它自動重開


↑ 重開機的過程都 [不需要] 人為介入操作


↑ windows 的開機畫面


↑ 第一次開機會看到的初始化畫面


↑ 等安裝程式檢查視訊效能


↑ 之後就會跳到輸入名稱的畫面了


↑ 然後隨便幫這台電腦取個名稱之後按 [下一步]


↑ 就會跳到輸入密碼的畫面


↑ 這邊建議要輸入密碼 因為之後 MPI 的執行環境有需要所以非輸入不可w


↑ 然後依個人喜好選擇要不要自動更新


↑ 接著設定時間日期


↑ 然後選擇網路型態


↑ 再來就慢慢等了


↑ windows 的歡迎畫面


↑ 然後等待進入桌面


↑ 然後進入桌面 安裝就完成了

接著就是讓 windows 進行自動更新了

一個很麻煩的東西叫做 IE

為了接下來的安裝需求

IE必須要更新到10以上才行



安裝 Visual Studio 2015


不管是用光碟還是ISO檔或是EXE執行安裝檔

總之把它點起來就是了


↑ 然後就會看到安裝啟動畫面


↑ 等它跑初始化


↑ 然後選 [自訂] 安裝


↑ 勾選 [通用 windows 應用程式開發工具]


↑ 勾選 [程式語言]

完成後按 [下一步]


↑ 確認要安裝的項目 然後按 [安裝]


↑ 因為 UAC 沒關掉 所以就會跳出這個 選 [是] 繼續安裝


↑ 然後就慢慢等待了

通常快的話大概半小時到一小時

如果是使用 online 即時下載的話,會依照網路速度變得更久

慢一點的電腦大概可以跑個3~4個小時,甚至更久


↑ 最後就安裝完成了

雖然說是完成,但並沒有說安裝成功...

不過那不要緊,總之就是安裝完了w


安裝 Intel Parallel Studio XE 2016



↑ 把 Intel Parallel Studio XE 2016 安裝檔點起來,然後又是UAC... 只好同意它了


↑ 然後選擇一個解壓縮的路徑

基本上有把下面那個選項打勾的話,只要不是硬碟不夠大或其他問題

對結果來說應該都不會有影響

反正它裝完之後就會自己把這些檔案給砍了XD


↑ 然後就慢慢等...


↑ 安裝畫面

解壓縮完之後會有一小段空白時間

安裝程式會自動被叫起來 所以可以不用理它

然後這個安裝畫面下方的灰色地方

裡面有支根本看不見的綠色光棒的進度條...= =

等它跑完初始化就會開始準備安裝了


↑ 跑完綠色的進度條之後就變成文字了


↑ 安裝引導指南會告訴你有什麼可以裝

但你在這個步驟什麼事也沒得做

所以只能按下一步Σ(゚Д゚)


↑ 安裝程式會進行系統需求評估

他說可能需要重開機

不過其實根本不用理它 只要下一步就好XD


↑ 然後同意這個根本不可能花時間去看的同意書


↑ 接著就要輸入序號了 輸入完按下一步


↑ 這時候就會看到一個藍色點點的圈圈在你的螢幕上一直轉呀轉呀轉的


↑ 之後就會問你要不要幫助他們改善程式 傳送一些不知名的數據給他們

基於開發者的立場,通常沒什麼特殊狀況的話 就選同意吧...


↑ 然後安裝程式會告訴你 它會裝些什麼東西 跟 它要裝去哪裡

這時候可以選擇客製化安裝

自行選擇有需要的部分

不過反正只是一般使用,所以就很偷懶的讓它預設不管了XD


↑ 接著它會告訴你 它要安裝一個 Open Source 的 GDB

然後不用理它 直接下一步


↑ 總共要安裝 144 個元件

這個步驟要花上非常久的時間


↑ 經過了很長一段時間 總算是裝好了


安裝 MPICH 1.4.1p1


至於為什麼 MPICH 有那麼多的版本卻要選擇這版

其實單純又是因為我懶XD

因為這版的安裝是有執行檔可以直接一直按下一步的

比較新的版本後面就沒有執行檔可以這樣按了

比較新的版本都要自己重建

要不然就是要自己手動把檔案搬來搬去

所以雖然 MPICH 已經都有 3.X 了

反正功能性並沒有太大的影響

所以就直接用懶人方法了XD


↑ 把安裝執行檔點起來


↑ 然後歡迎畫面就下一步吧...


↑ 非常多的程式訊息 不過應該沒什麼人會想看 所以就直接下一步吧...


↑ 又是一個不可能看得同意書 就再下一步吧...


↑ 沒什麼需求就讓它維持預設的密碼就好了

這邊它會跟你說 如果你不是 admin 的話就把安裝檔給結束掉不要安裝了= =


↑ 然後選擇安裝路徑

安裝路徑基本上為了開發方便

所以採用原本的預設值

不然每台都裝不一樣的位置之後會很麻煩...0.0


↑ 確認安裝之後就按下一步


↑ 然後就會跳到安裝畫面了


↑ 這時候討人厭的 UAC 又跳出來了 反正也只能同意它了XD


↑ 然後等它的灰色棒棒跑完


↑ 然後防火牆就生氣了0.0

基本上 MPI 就是要走網路通訊

所以也只能乖乖地讓這支程式允許通過防火牆XD


↑ 裝完之後就把它關了

整篇最重要的地方


安裝到這裡基本上就算全部完成了

接著就是要檢查跟設定一些東西

大部分的情況下如果安裝沒有出錯的話

並不需要再安裝其他的套件才對

這時候就可以開始編譯程式了

這次用的編譯程式叫做 mpif77

實際上 mpif77 並不算是編譯器

頂多只能稱作編譯腳本指令而已

而 mpif77 是個基於 OpenMPI 用來編譯 fortran 程式的指令

mpif77 實際上是去呼叫 mpifc 這個 script 把 fortran compiler 給叫起來


↑ mpif77 路徑

mpif77 的預設安裝路徑會在

C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.3.207\windows\mpi\intel64\bin


既然都裝好了

所以就直接抓起來編譯看看

切換到執行編譯的工作路徑下

然後開始編譯

這邊又是因為我很懶

在打這篇文章之前就已經試了大概上百次了

所以實在不想要一直重打指令

所以就直接把編譯指令寫成 bat 檔了w

基本上編譯指令大概是

mpif77 -fc=ifort -o outputname f_file1 f_file2 ....


中間因為有些特殊需求

所以加了 /F這個指令

/F 後面接的 0x 值 指的是要將 stack 開到多大

這隻程式不知道為什麼聽說要吃很大的 stack 所以直接使用 /F 指令來擴增 stack 記憶體空間

後面的 /trackback 跟 /check:all 都是用來 debug 用的指令

這樣錯誤的時候才會輸出錯誤訊息可以方便知道程式死在哪裡

然後這邊馬上就遇到錯誤了


↑ 找不到 ifort

這時候 windows 竟然抱怨說找不到最重要的編譯器 ifort ...= ="

沒辦法只好把環境變數打開來看看


↑ 預設狀態的 Path 值

突然發現原來 ifort 的路徑並沒有被加進去

只好手動把 ifort 的路徑加到 Path 裡面

ifort 的預設路徑在

C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.3.207\windows\bin\intel64


加完之後再重來一次

這時候又出現了另外一個問題


↑ 這次變成 找不到 link 了

而這個 link 是 VC 的執行檔

這也是為什麼要連帶安裝 VS 的其中一個原因


↑  link 的預設路徑

link 的預設路徑在

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin


同樣把上面這個路徑加進 path 這個變數裡面

然後再重新編譯一次

結果還是出現錯誤...Σ( ̄□ ̄|||)


↑  找不到 ifconsol.lib

這次換成 lib 找不到了


↑ 沒有該有的 libraries 路徑

把所有的變數翻了一輪後發現

竟然沒有我要的 lib 變數Σ(゚Д゚)

所以只好手動新增一個名為 LIB 的變數

然後再把路徑給指定進去

這邊追加 intel compiler 的 libraries 路徑


↑ 追加 LIB 變數路徑

再一次的重新編譯

然後還是錯誤...OTL

這次換成缺少 VC 的 libraries 路徑了@@"

只好再手動追加進 LIB 變數


↑ 追加 LIB 變數路徑

又重新編譯一次

當然還是錯誤...

這次換成 kernel32.lib 找不到了

這個 lib 是 Microsoft 的 SDK library 之一


↑ 缺少 kernel32.lib

所以一樣補上 LIB 路徑

kernel32.lib 的預設路徑在

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64



↑ kernel32.lib 預設路徑


↑ 把路徑加到 LIB 裡

當然又只好再重新編譯了

想當然事情絕對不會那麼單純

一如往常的它又出錯了(´・ω・`)

這次變成 libucrt.lib 找不到了

這個 lib 是屬於 Windows kits 的 lib

預設在

 C:\Program Files (x86)\Windows Kits\10\Lib\<version>\ucrt\x64


↑ 安裝的時候出現了多種版本

然後很神奇的是它有很多個版本

每個版本可能都有些差異

但那對這次的作業來說並沒有太大的影響

所以挑一個你喜歡的版本就好

這邊挑比較新的版本


↑ 找到 libucrt.lib 這個路徑

然後同樣把它加到 LIB 變數裡面


↑ ucrt 路徑

這時候再重新編譯一次

終於...


↑ 編譯完成產生執行檔

雖然還是出現了很多警告

不過至少它終於順利編完了(*´▽`*)

到這邊應該就沒問題了!


檢查


接著使用 VS 內建的開發工具檢查 stack 記憶體的空間大小

指令

dumpbin /headers <exe_file>



↑ dumpbin header 執行結果

從結果來看 stack 被指定成我們要的大小了

stack 要多大就給多大

執行


然後就是實際執行了

因為使用的這版 MPI 是比較舊的版本

所以還是使用 mpiexec 來執行

指令看起來會像是

mpiexec -machinefile <machinefile> -np <num_proc> <exe_dir>



↑ 實際執行結果

程式看起來可以正常的運作

所以應該是沒有什麼太大的問題了


問題

目前還沒有時間解決這些問題

只是暫時找方法把它迴避掉而已

等有時間再來補這段XD

1. forrtrl: severe (47): write to READONLY file
2. forrtrl: severe (170): stack overflow


相關來源

1. MPICH download website

2. Intel Parallel Studio XE

3. Visual Studio