2014年1月27日 星期一

How To Solve The Link Fatal Error lnk1201 error writing to program database pdb

When Visual Studio 2003 run on Window 7, it occur the following error every time when compile finish:

 Link Fatal error lnk1201 error writing to program database
After survey the solutions on internet,  all the problems point to it's a bug to Visual Studio 2003 on Windows 7. Windows 7 did not delete the .pdb after compile finish last time. You might disable the pdb debugger feature to fix this issue, but it is stupid. All the things we should do is free the file .pdb manually.

Unlocker.exe "$(TargetDir)$(ProjectName).pdb" /S







2014年1月22日 星期三

解決 Relocations in generic ELF (EM: 40)

當 Link 完後出現 Relocations in generic ELF (EM: 40) 代表與別的 .a 連結的 compiler 版本不同



假設有兩個Project 1.JPEGLib 和 2.GUI

JPEGLib 使用 arm-linux-gcc 編出 jpeglib.a 後

當 Project 2.GUI 是使用 gcc 編出 gui 後要 Link 時,兩者編譯版本不同就會發生此問題。

解決方法:
將 JPEGLib 使用 gcc 重編或是 GUI 用 arm-linux-gcc 重編,總之兩者版本需要一致

[1] 错误:Relocations in generic ELF (EM: 40)_Linux编程_Linux公社-Linux系统门户网站
http://www.linuxidc.com/Linux/2012-08/68693.htm
[2] 错误:Relocations in generic ELF (EM: 40)
http://blog.csdn.net/dulin201004/article/details/7884658


2014年1月16日 星期四

Update Fedora repo URL

今天拿到一個 Fedora 6 的版本,發現要 yum update 時太舊了
查了一下,原來是 fedora.repo 的來源已變更網址
因此只要針對 /etc/yum.repos.d/ 下的 fedora.repo 和 fedora-updates.repo 進行修改
(有時fedora.repo會叫作fedora-core.repo)

// ======fedora.repo======
將 
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/
改成
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/

// ======fedora-updates.repo======

#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
改成
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/$releasever/$basearch/

[1] Yum error: "cannot find a valid baseurl for repo: base"
[2] yum 基本介紹和參數說明



案例狀況: 
使用yum安裝套件時出現錯誤,訊息為"cannot find a valid baseurl for repo: base",推斷是fedora的版本過舊的關係(這年頭居然可以看到fedora 3...),參考網路上的解決方式,整理成以下步驟。

Linux版本資訊:LSB Version: 1.3Distributor ID: FedoraCoreDescription: Fedora Core release 3 (Heidelberg)Release: 3Codename: Heidelberg
以上資訊是使用lsb_release -a得出的。詳細請參考lsb_release。
point: 將yum的fedora.repo及fedora-updates.repo裡的"baseurl"修改成fedora新的套件server url。
(以下步驟皆為root身分執行) 
cd /etc/yum.repos.d
cp fedora.repo /root/Desktop
cp fedora-updates.repo /root/Desktop(怕修改錯誤,複製一份出來,後面的存放位置可以自選)
用vim或vi修改fedora.repo。

#baseurl=http://download.fedora.redhat.com/pub/fedora
/linux/core/$releasever/$basearch/os/
改成
baseurl=http://archives.fedoraproject.org/pub/archive
/fedora/linux/core/$releasever/$basearch/os/
接著修改fedora-updates.repo。

#baseurl=http://download.fedora.redhat.com/pub/fedora
/linux/core/updates/$releasever/$basearch/
改成
baseurl=http://archives.fedoraproject.org/pub/archive
/fedora/linux/core/updates/$releasever/$basearch/
修改完:wq存檔離開,這是目前fedora提供的套件server url,以後yum若又遇到cannot find a valid baseurl for repo: base,可能就是fedora又更換套件server,到時再修改新的url即可。
粗體字皆為指令或修改的code,linux下大小寫視為不同情況很多,修改或輸入指令請小心注意。

2014年1月3日 星期五

Create Directory Tree in C++/Linux?

在 Linux 中我想要用 C/C++ 建立一個資料夾 /tmp/a/b/c


一般懶人作法是 system("mkdir -p /tmp/a/b/c")

For Boost:
#include <boost/filesystem.hpp>
//...
 boost::filesystem::create_directories("/tmp/a/b/c");

#define _mkdir(dir) mkdir(dir, 0777)
if (_mkdir(filename) != 0 && errno != EEXIST) return FALSE;

[1] How can I create directory tree in C++/Linux?