ラウンドロビンスケジューリング
全ての線に同じ時間で切り替えること
OSでのRRの例
プログラム1、2、3がある。
一定時間をくっきりにプログラム1,2,3の順でマルチタスク化する。
P1(5s)->P2(5s)->P3(5s)->P1(5s)->...
それをラウンドロビンスケジューリングというもの
SyntaxHighlighter
2010-10-20
2010-09-22
MultiByte と WideChar の変換について
何回もやっちゃったので、一応ノートを書いておきます。
MSDN:
MultiByteToWideChar()
WideCharToMultiByte()
使う例:
char before[]="変換前";
WCHAR wcAfter[1024];
char mbAfter[1024];
MultiByteToWideChar(CP_UTF8, NULL, before, -1, wcAfter, 0);
WideCharToMultiByte(CP_UTF8, NULL, wcAfter, -1, mbAfter, 0, NULL, NULL);
一般の文字列の場合、TEXT("使いたい文字")を使ったほうが便利かも。
どうやら、WideCharToMultiByteの場合がやや面倒くさい。
MSDN:
MultiByteToWideChar()
WideCharToMultiByte()
使う例:
char before[]="変換前";
WCHAR wcAfter[1024];
char mbAfter[1024];
MultiByteToWideChar(CP_UTF8, NULL, before, -1, wcAfter, 0);
WideCharToMultiByte(CP_UTF8, NULL, wcAfter, -1, mbAfter, 0, NULL, NULL);
一般の文字列の場合、TEXT("使いたい文字")を使ったほうが便利かも。
どうやら、WideCharToMultiByteの場合がやや面倒くさい。
Windows Vista以降のプログラム注意点
なんか面倒くさいことになりました。
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
とりあえずWTSSendMessage()を使って何とかしようかなぁ
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
とりあえずWTSSendMessage()を使って何とかしようかなぁ
2010-09-16
深入淺出MFC 2e 學習筆記: 第一章Generic
以下是自己在Windows 7中的Visual Studio 2008下編譯Generic所遇到的問題與解決方案
Generic.mak:
這個檔案年代已經久遠, 當中所使用之某些編譯工具在現在最新的vs2008已經不再提供 (如rc),所以放棄不用...
Generic.h(書中code)。有稍加修改
Generic.cpp(書中為.c)
Generic.rc(書中code)。以VS產生之原始檔, 最後加入書中code
resource.h 原本應該是rc根據generic.rc生成。但是VS笨笨的,所以還是自己修改吧
VS2008,打開一個新的win32程式用新專案,內容用空白
自己把上面這幾個檔案加入/修改之後就能編譯了
理論上,加入generic.rc的時候,resource.h檔案就會被自動生成,可是內容就點點點了
如果編譯出現囉嗦的字眼之類的,應該是編碼問題
把專案的編碼從UNICODE(預設)改成用多字元編碼就沒事了
Generic.mak:
這個檔案年代已經久遠,
Generic.h(書中code)。有稍加修改
BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
Generic.cpp(書中為.c)
#include <windows.h> #include "resource.h" #include "generic.h" HINSTANCE _hInst; HWND _hWnd; char _szAppName[] = "Generic"; char _szTitle[] = "Generic Sample Application"; int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; UNREFERENCED_PARAMETER(lpCmdLine); if(!hPrevInstance) if(!InitApplication(hInstance) ) return (FALSE); if(!InitInstance(hInstance, nCmdShow)) return (FALSE); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_ BRUSH); wc.lpszMenuName = "GenericMenu"; wc.lpszClassName = _szAppName; return (RegisterClass(&wc)); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { _hInst = hInstance; _hWnd = CreateWindow( _szAppName, _szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if(!_hWnd) return (FALSE); ShowWindow(_hWnd, nCmdShow); UpdateWindow(_hWnd); return (TRUE); } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch(message){ case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(wmId){ case IDM_ABOUT: DialogBox(_hInst, "AboutBox", hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); } LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam) ; switch(message){ case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, TRUE); return (TRUE); } break; } return (FALSE); }
Generic.rc(書中code)。以VS產生之原始檔,
// Microsoft Visual C++ で生成されたリソース スクリプトです。 // #include "windows.h" // 增加這行 #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS //////////////////////////////////////////////////////////// ///////////////// // // TEXTINCLUDE 2 リソースから生成されました。 // #include "afxres.h" ////////////////////////////// ////////////////////////////// ///////////////// #undef APSTUDIO_READONLY_SYMBOLS ////////////////////////////// ////////////////////////////// ///////////////// // 英語 (米国) リソース #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) LANGUAGE 17, 1 #pragma code_page(932) #ifdef APSTUDIO_INVOKED ////////////////////////////// ////////////////////////////// ///////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // 英語 (米国) リソース ////////////////////////////// ////////////////////////////// ///////////////// #ifndef APSTUDIO_INVOKED ////////////////////////////// ////////////////////////////// ///////////////// // // TEXTINCLUDE 3 リソースから生成されました。 // ////////////////////////////// ////////////////////////////// ///////////////// #endif // APSTUDIO_INVOKED でない場合 // 以下為自己加入 GenericMenu MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New", IDM_NEW, GRAYED MENUITEM "&Open...", IDM_OPEN, GRAYED MENUITEM "&Save", IDM_SAVE, GRAYED MENUITEM "Save &As...", IDM_SAVEAS, GRAYED MENUITEM SEPARATOR MENUITEM "&Print...", IDM_PRINT, GRAYED MENUITEM "P&rint Setup...", IDM_PRINTSETUP, GRAYED MENUITEM SEPARATOR MENUITEM "E&xit", IDM_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", IDM_UNDO, GRAYED MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", IDM_CUT, GRAYED MENUITEM "&Copy\tCtrl+C", IDM_COPY, GRAYED MENUITEM "&Paste\tCtrl+V", IDM_PASTE, GRAYED MENUITEM "Paste &Link", IDM_LINK, GRAYED MENUITEM SEPARATOR MENUITEM "Lin&ks...", IDM_LINKS, GRAYED END POPUP "&Help" BEGIN MENUITEM "&Contents", IDM_HELPCONTENTS, GRAYED MENUITEM "&Search for Help on...", IDM_HELPSEARCH, GRAYED MENUITEM "&How to Use Help", IDM_HELPHELP, GRAYED MENUITEM SEPARATOR MENUITEM "&About Generic...", IDM_ABOUT END END AboutBox DIALOG DISCARDABLE 22, 17, 144, 75 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "About Generic" BEGIN CTEXT "Windows 95", -1, 0, 5, 144, 8 CTEXT "Generic Application", -1, 0, 14, 144, 8 CTEXT "Version 1.0", -1, 0, 34, 144, 8 DEFPUSHBUTTON "OK", IDOK, 53, 59, 32, 14, WS_GROUP END
resource.h 原本應該是rc根據generic.rc生成。但是VS笨笨的,所以還是自己修改吧
//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by generic.rc // 自己加入部分START #define IDM_NEW 201 #define IDM_OPEN 202 #define IDM_SAVE 203 #define IDM_SAVEAS 204 #define IDM_PRINT 205 #define IDM_PRINTSETUP 206 #define IDM_EXIT 207 #define IDM_UNDO 208 #define IDM_CUT 209 #define IDM_COPY 210 #define IDM_PASTE 211 #define IDM_LINK 212 #define IDM_LINKS 213 #define IDM_HELPCONTENTS 214 #define IDM_HELPSEARCH 215 #define IDM_HELPHELP 216 #define IDM_ABOUT 217 //#define IDOK 300 //#define IDCANCEL 301 // 自己加入部分END // 新しいオブジェクトの次の既定値 // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
VS2008,打開一個新的win32程式用新專案,內容用空白
自己把上面這幾個檔案加入/修改之後就能編譯了
理論上,加入generic.rc的時候,resource.h檔案就會被自動生成,可是內容就點點點了
如果編譯出現囉嗦的字眼之類的,應該是編碼問題
把專案的編碼從UNICODE(預設)改成用多字元編碼就沒事了
2010-09-09
Windows 32bit プログラムを 64bit用に変更するときの注意点。
x64環境のSDKを使ってコンパイルするときに、GWL_WNDPROCなどシステムの定数が使えないことになります。
それは、SDKでは、x64環境であれば(#ifdef _win64)、それらの変数の定義をキャンセルした(undef)のです。
解決法として、GWL_WNDPROCを使った関数(GetWindowLong()/SetWindowLong())などをポインタを使うように変わること。
GetWindowLong() -> GetWindowLongPtr()
そして、GWL_WNDPROC -> GWLP_WNDPROC
としたら、x64環境でも無事に使えるようになります
もし同じコードを32bit環境での実行に心配を持つなら、
#ifdef _win64
// 64bitコード
#else
// 32bitコード
Credential Provider
Windows Vista 以降ログイン画面をカストマイズしたい場合いじるプログラムである。
しかし、何かの原因で、Microsoft自分が最初にリリースしたサンプルプログラムのBETAにはバッグが隠れている。それはSimpleHardwareEventCredentialProviderの中のMessageCredential.hにある。そのファイルの最後にあるSFI_NUM_FIELDSをSMFI_NUM_FIELDSに訂正しないと、64bitのOSで実行すると、メモリアクセスエラーになって、LogonUIがクラッシュすることが起こってしまう。そのバッグはFinalリリースに修正されたが、万が一BETAを基づいて作ったプログラムであれば、見直したほうがいいと思う。
結構悩ませたので、ここに記入して置く。
誰かの助けになるといいと思う。
しかし、何かの原因で、Microsoft自分が最初にリリースしたサンプルプログラムのBETAにはバッグが隠れている。それはSimpleHardwareEventCredentialProviderの中のMessageCredential.hにある。そのファイルの最後にあるSFI_NUM_FIELDSをSMFI_NUM_FIELDSに訂正しないと、64bitのOSで実行すると、メモリアクセスエラーになって、LogonUIがクラッシュすることが起こってしまう。そのバッグはFinalリリースに修正されたが、万が一BETAを基づいて作ったプログラムであれば、見直したほうがいいと思う。
結構悩ませたので、ここに記入して置く。
誰かの助けになるといいと思う。
keyword: Credential Provider, 64bit
2010-09-07
NS-3
最終的にNS-2が廃棄されるので、
今とこで、NS-3のドキュメントを読みながら訳しています
時間があれば、ここに拙者の訳を置きます
今とこで、NS-3のドキュメントを読みながら訳しています
時間があれば、ここに拙者の訳を置きます
最初の作品はns本部のdev版のチュートリアルhttp://www.nsnam.org/docs/tutorial.htmlに沿って訳していきます
前後矛盾だらけの訳になれないように頑張ります
では
32bit & 64bit programming
If u make a program that can run on a 32-bit OS, in most case, all u
have to do is rebuild it for 64-bit environment.
have to do is rebuild it for 64-bit environment.
u can compile a 64-bit program on 32-bit environment. All u have to do
is get the compiler and Libraries for 64-bit program.
Some of the 32-bit programs cannot run corrently on 64-bit OS, so u
have to rebuild(recomile) it for running on 64-bit OS.
Good luck, anyway.
2010-07-14
NS-2 (Network Simulator Ver.2) and NS-3
なんか色々あるなぁ
NS-2 wiki
http://nsnam.isi.edu/nsnam/index.php
NS-3 wiki
http://www.nsnam.org/wiki/index.php
NS-2はOTCLと結合することに対して、NS-3はPythonと結合するか、完全にC++でやるかのどっちですね
まぁ、今はNS-2だけでも精一杯で、時間があればNS-3の移行に目を移す
2010-07-06
NS-2 (Network Simulator Ver.2) install log
以下の内容はKの日記~with ubuntu~より。忘れてしまうや元サイトが接続不能を避けて、ここに転載したもの。内容に出入があれば、全ては元サイトの方を正しいとします。
NS-2 (Network Simulator Ver.2)とは、計算機上でネットワークをエミュレートしてデータの転送実験等ができるソフトです。
新たなプロトコルを開発し、仮想ネットワークに実装して実験する事も出来ます。
OTclを習得しないと実験自体ができず、C++を習得しないとモジュールの開発は出来ず、マニュアルには間違いも多く、日本語の書籍は殆ど無く・・・と、大変無愛想なシミュレータです。
しかしながら多くの機能を実装している上、無料で利用できるので、研究予算の無い学生にはありがたいです。
最近Ubuntu利用者が増えているのに伴い、このソフトをUbuntuにインストールして利用する人も増えているようです。
筆者自身もインストールして使っているので、インストール方法を書いておきます。
Ubuntu9.10およびUbuntu10.04へのインストールも可能です。
もし挫折している方がみえましたら、参考になれば幸いです。
【1】必要なパッケージのインストール
NS-2に必要なパッケージをインストールします。
【2】ソースをダウンロード
NS-2の本家(http://www.isi.edu/nsnam/ns/)へ行って"ns-allinone-2.**"パッケージをダウンロードするか、端末からwgetで取得します
今回は、現時点での最新版である 2.34 を利用してみます。
↑の2.34を2.33に書き換えれば前のバージョンがDL可能です。
解凍します。
以下の操作は全てns-allinone-2.34ディレクトリ内で行うものとします
【3】xgraphのソースファイル削除
xgraphは、ns-allinone-2.34のソースに含まれており、ソースを直接ビルドすることもできますが、Ubuntuのパッケージが用意されているのでapt-getでインストールしてしまいます。
なので、このソースは必要なくなったので消してしまいます。
【4】installスクリプトからxgraphのインストールコマンドを削除
xgraphのソースを削除しましたが、インストール用のシェルスクリプトにはxgraphのインストールコマンドもかかれているので、これも無効にします。
消してしまってもいいですが、コメントアウトでも構いません。
まずinstallを開きます。
スクリプトの最後の方にxgraphのインストールスクリプトが書かれています。
[Ctrl] + [F]
でxgraphを文字列検索すると見つけやすいです。
286行目の # Compile and install xgraph から、
304行目の cd ../
がインストールスクリプトなので、286?304行目を全てコメントアウト(行頭に#を付記)します。
続いて638?643行目でシンボリックリンクを張っているので、同様にコメントアウト。
671?674行目でインストールディレクトリを表示しているので、これも同様にコメントアウト。
【!】Ubuntu9.10 or Ubuntu10.04 の場合
Ubuntu9.10もしくはUbuntu10.04でインストールしようとすると、OTclのビルド中に、
こんなエラーが出てインストールが停止してしまいます。
これはどうもGCCのバージョンとOTclの相性が悪いのが原因のようです。
Ubuntu9.10及びUbuntu10.04に標準でインストールされるGCCのバージョンは4.4です。
Ubuntu9.04ではGCCのバージョンは4.3で、普通にインストール出来ていました。
なので、Otclのインストール時だけコンパイラをgcc-4.3に変更してビルドしてやります。
なお、OtclのソースにはC++ソースはありませんので、g++のバージョン変更は必要ありません。
まずgcc-4.3をインストールします。
次に、
ns-allinone-2.34/otcl-1.13/Makefile.in
というファイルを開きます。
ファイルの先頭付近に、
という記述があります。これを
と書き換えます。こうすることでOTclのインストールに使うコンパイラをgcc-4.3に変更出来ます。
ちなみにコンパイラのバージョンによるエラーが出るのはOTclだけのようです。
変更を保存したらインストールに進みます。
【5】インストール
インストールします。
インストールログを残したい場合は、
コンパイル中、「警告」の文字がたくさん出てきますが、エラーでは無いので無視してください。
コンパイラによっては出ないかもしれません。
【6】パスの設定
各実行ファイルへのパスを張ります。
xgraphはaptでインストールしてるので、普通に使えます。
他のパスは以下を参考にしてください。
一応インストールの最後に
↑こんなメッセージが表示されるはずなので(これは僕の環境での出力ですが)、これを参考にして記述していけばいいです。
まず一旦ホームディレクトリに戻りましょう。
PATHは.bashrcに書き込みます(cshの場合は多分.tcshrc)。
ファイルの一番最後に追記します。
バージョンはns-allinone-2.34のものなので、それ以前のバージョンを使う場合はそれぞれ書き直してください。
保存したら端末で、
を実行すると変更が反映されます。
端末で
と入力してプロンプト「%」が表示されることを確認します。
と入力して「NAM - The Network Animator」が起動するか確認します。
NS-2 (Network Simulator Ver.2)とは、計算機上でネットワークをエミュレートしてデータの転送実験等ができるソフトです。
新たなプロトコルを開発し、仮想ネットワークに実装して実験する事も出来ます。
OTclを習得しないと実験自体ができず、C++を習得しないとモジュールの開発は出来ず、マニュアルには間違いも多く、日本語の書籍は殆ど無く・・・と、大変無愛想なシミュレータです。
しかしながら多くの機能を実装している上、無料で利用できるので、研究予算の無い学生にはありがたいです。
最近Ubuntu利用者が増えているのに伴い、このソフトをUbuntuにインストールして利用する人も増えているようです。
筆者自身もインストールして使っているので、インストール方法を書いておきます。
Ubuntu9.10およびUbuntu10.04へのインストールも可能です。
もし挫折している方がみえましたら、参考になれば幸いです。
【1】必要なパッケージのインストール
NS-2に必要なパッケージをインストールします。
sudo apt-get update sudo apt-get install build-essential xorg-dev libpcap-dev libtool gcc g++ xgraph |
【2】ソースをダウンロード
NS-2の本家(http://www.isi.edu/nsnam/ns/)へ行って"ns-allinone-2.**"パッケージをダウンロードするか、端末からwgetで取得します
今回は、現時点での最新版である 2.34 を利用してみます。
wget http://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.34/ns-allinone-2.34.tar.gz/download |
↑の2.34を2.33に書き換えれば前のバージョンがDL可能です。
解凍します。
tar zxvf ns-allinone-2.34.tar.gz |
以下の操作は全てns-allinone-2.34ディレクトリ内で行うものとします
【3】xgraphのソースファイル削除
xgraphは、ns-allinone-2.34のソースに含まれており、ソースを直接ビルドすることもできますが、Ubuntuのパッケージが用意されているのでapt-getでインストールしてしまいます。
なので、このソースは必要なくなったので消してしまいます。
rm -rf xgraph-12.1 |
【4】installスクリプトからxgraphのインストールコマンドを削除
xgraphのソースを削除しましたが、インストール用のシェルスクリプトにはxgraphのインストールコマンドもかかれているので、これも無効にします。
消してしまってもいいですが、コメントアウトでも構いません。
まずinstallを開きます。
gedit install |
スクリプトの最後の方にxgraphのインストールスクリプトが書かれています。
[Ctrl] + [F]
でxgraphを文字列検索すると見つけやすいです。
286行目の # Compile and install xgraph から、
304行目の cd ../
がインストールスクリプトなので、286?304行目を全てコメントアウト(行頭に#を付記)します。
続いて638?643行目でシンボリックリンクを張っているので、同様にコメントアウト。
671?674行目でインストールディレクトリを表示しているので、これも同様にコメントアウト。
【!】Ubuntu9.10 or Ubuntu10.04 の場合
Ubuntu9.10もしくはUbuntu10.04でインストールしようとすると、OTclのビルド中に、
============================================================ * Build OTcl-1.13 ============================================================ No .configure file found in current directory Continuing with default options... checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for string.h... (cached) yes checking for main in -lXbsd... no checking for socket in -lsocket... no checking for gethostbyname in -lnsl... yes checking for dcgettext in -lintl... no checking for getnodebyname in -ldnet_stub... no checking that g++ can handle -O2... no checking standard STL is available... no checking for tcl.h... -I../include checking for tclInt.h... -I../include checking for libtcl8.4... -L../lib -ltcl8.4 checking for init.tcl... ../lib/tcl8.4 checking for http.tcl... ../lib/tcl8.4/http1.0 checking Tcl http.tcl library... yes checking for tclsh8.4.18... no checking for tclsh8.4... ../bin/tclsh8.4 checking for tk.h... -I../include checking for libtk8.4... -L../lib -ltk8.4 checking for tk.tcl... ../lib/tk8.4 checking for X11 header files checking for X11 library archive checking for XOpenDisplay in -lX11... yes checking for XShmAttach in -lXext... yes checking for ranlib... ranlib checking for a BSD-compatible install... /usr/bin/install -c checking system version (for dynamic loading)... Linux-2.6.32-21-generic No explicit static compilation flag; setting V_STATIC to "" checking for dlopen in -ldl... yes checking for a BSD-compatible install... /usr/bin/install -c configure: creating ./config.status config.status: creating Makefile rm -f libotcl.so otcl.o so_locations gcc -c -g -O2 -DNDEBUG -DUSE_SHM -fpic -I. -I/usr/local/ns-allinone-2.34/include -I/usr/local/ns-allinone-2.34/include -I/usr/local/ns-allinone-2.34/include -I/include otcl.c ld -shared -o libotcl.so otcl.o otcl.o: In function `OTclDispatch': /usr/local/ns-allinone-2.34/otcl-1.13/otcl.c:495: undefined reference to `__stack_chk_fail_local' otcl.o: In function `Otcl_Init': /usr/local/ns-allinone-2.34/otcl-1.13/otcl.c:2284: undefined reference to `__stack_chk_fail_local' ld: libotcl.so: hidden symbol `__stack_chk_fail_local' isn't defined ld: final link failed: Nonrepresentable section on output make: *** [libotcl.so] エラー 1 otcl-1.13 make failed! Exiting ... See http://www.isi.edu/nsnam/ns/ns-problems.html for problems |
こんなエラーが出てインストールが停止してしまいます。
これはどうもGCCのバージョンとOTclの相性が悪いのが原因のようです。
Ubuntu9.10及びUbuntu10.04に標準でインストールされるGCCのバージョンは4.4です。
Ubuntu9.04ではGCCのバージョンは4.3で、普通にインストール出来ていました。
なので、Otclのインストール時だけコンパイラをgcc-4.3に変更してビルドしてやります。
なお、OtclのソースにはC++ソースはありませんので、g++のバージョン変更は必要ありません。
まずgcc-4.3をインストールします。
sudo apt-get update sudo apt-get install gcc-4.3 |
次に、
ns-allinone-2.34/otcl-1.13/Makefile.in
というファイルを開きます。
ファイルの先頭付近に、
CC= @CC@ |
という記述があります。これを
CC= gcc-4.3 |
と書き換えます。こうすることでOTclのインストールに使うコンパイラをgcc-4.3に変更出来ます。
ちなみにコンパイラのバージョンによるエラーが出るのはOTclだけのようです。
変更を保存したらインストールに進みます。
【5】インストール
インストールします。
./install |
インストールログを残したい場合は、
./install &> compile.out |
コンパイル中、「警告」の文字がたくさん出てきますが、エラーでは無いので無視してください。
コンパイラによっては出ないかもしれません。
【6】パスの設定
各実行ファイルへのパスを張ります。
xgraphはaptでインストールしてるので、普通に使えます。
他のパスは以下を参考にしてください。
一応インストールの最後に
(1) You MUST put /home/k/ns-allinone-2.34/otcl-1.13, /home/k/ns-allinone-2.34/lib, into your LD_LIBRARY_PATH environment variable. If it complains about X libraries, add path to your X libraries into LD_LIBRARY_PATH. If you are using csh, you can set it like: setenv LD_LIBRARY_PATH If you are using sh, you can set it like: export LD_LIBRARY_PATH= (2) You MUST put /home/k/ns-allinone-2.34/tcl8.4.18/library into your TCL_LIBRARY environmental variable. Otherwise ns/nam will complain during startup. |
↑こんなメッセージが表示されるはずなので(これは僕の環境での出力ですが)、これを参考にして記述していけばいいです。
まず一旦ホームディレクトリに戻りましょう。
cd |
PATHは.bashrcに書き込みます(cshの場合は多分.tcshrc)。
gedit .bashrc |
ファイルの一番最後に追記します。
# PATH for NS-2 # VERSION NS_VER=2.34 OTCL_VER=1.13 TCL_VER=8.4.18 # Parent directory path NS_PAR=/usr/local # NS home directory path NS_HOME=$NS_PAR/ns-allinone-$NS_VER # LD_LIBRARY_PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NS_HOME/otcl-$OTCL_VER:$NS_HOME/lib # TCL_LIBRARY export TCL_LIBRARY=$NS_HOME/tcl$TCL_VER/library # PATH PATH=$PATH:$NS_HOME/bin |
バージョンはns-allinone-2.34のものなので、それ以前のバージョンを使う場合はそれぞれ書き直してください。
保存したら端末で、
source .bashrc |
を実行すると変更が反映されます。
端末で
ns |
と入力してプロンプト「%」が表示されることを確認します。
nam |
と入力して「NAM - The Network Animator」が起動するか確認します。
2010-03-18
HTML入力ボックス-入力文字限定
以下の内容はHTML限定, JavaScript関連
IMEの作動の制御:
■日本語入力モードを設定します
※テキストフィールドにフーォカスして文字入力して下さい
◆< input style="ime-mode: active;" type="text" >
※日本語入力モードの変更(style属性)
自動:auto
日本語:active(既定の日本語が起動する)
半角英数字:inactive(日本語がインアクティブになる)
http://www.webstudio.jp/web_studio/tech_b/b001.htm
また、深く入力をコントロールするにはJavaScriptをかけて、入力キーを制限する
http://questionbox.jp.msn.com/qa4521382.html
http://ziddy.japan.zdnet.com/qa4389224.html
例えば、数字だけ入力できるようにするには
< input type="text" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')" >
IMEの作動の制御:
■日本語入力モードを設定します
※テキストフィールドにフーォカスして文字入力して下さい
◆< input style="ime-mode: active;" type="text" >
※日本語入力モードの変更(style属性)
自動:auto
日本語:active(既定の日本語が起動する)
半角英数字:inactive(日本語がインアクティブになる)
http://www.webstudio.jp/web_studio/tech_b/b001.htm
また、深く入力をコントロールするにはJavaScriptをかけて、入力キーを制限する
http://questionbox.jp.msn.com/qa4521382.html
http://ziddy.japan.zdnet.com/qa4389224.html
例えば、数字だけ入力できるようにするには
< input type="text" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')" >
2010-03-02
PHPとJavaScriptのチェックボックス(Checkbox)
HTML中にCheckBoxを使う場合、一般的には下のように書く
<input type="checkbox" name=abc value=xxx />
PHPで配列として読み出せるのに、name=abc[]ように、abcのあとに[]をつけるのは一般的に
ところで、それはちょっと変のことになる。
なぜなら、元々JavaScriptではdocument.form1.abcで呼び出されるcheckboxの配列は逆に使えなくなる。
こんなときに、解決方法として、document.form1.abcの代わりに、document.form1.elements["abc[]"]で呼び出すならokだ!!!!XDDDD
ということです。以上
登録:
投稿 (Atom)
人気の投稿
-
指令/英文 翻譯1 翻譯2 2D Solid 二維實體 2D 實面 2D Wireframe 二維線框 3D Array 三維陣列 3D 陣列 3D Dynamic View 三維動態觀察 3D 動態檢視 3d objects 三維物體 3D 物件 3D Orbit...
-
ノート程度: 線の太さを画面に反映させる Win: ツール>オプション でオプションウィンドを開き 作図スタイル>アクティブな作図スタイル>線のフォント で [ グラフィック領域で太さを表示]にチェックを入れる。 Mac: System Menu → 設定 /...
-
☆日本一 子煩悩な県 問題: 1.休日はたいてい子どもと遊ぶ 2.配偶者より子どもが大事である 3.外食するときは、まず子どもに何を食べたいか聞く 4.携帯の待ち受けは子どもの写真だ 5.子どもの寝顔を見て感動のあまり泣いたことがある ランキング 1.熊本県 2.北海道 3.山...
-
日本で結婚するときに、台湾の戸籍謄本の訳本が要る。 検索したら、いろいろ有用な先人たちの情報があります。 I♥TAIWAN - 日本小雪さんのブログ、最初ここからスタートして多分いちばん間違いなし。 在日台灣太太連絡簿 - 最低限の必要単語が載っている。 梅と桜 ...
-
這東西搞了兩個多禮拜,終於讓我找到合理的計算方式。 真圓度的計算方法,若使用半徑法,目前有 4種方式(參考Wikipedia(en)資料) 去取假想圓中心。 1. 最小區域圓法 Minimum Zone circle (MZC) 這是ISO及JIS B0621有規定的正式...
-
AutoCADではボタンで1クリック切り替えですけどね DraftSightではややめんどくさい 印刷シート(シートタブ)内で、全空間(モデルタブ)の特定の場所だけ出力させたい時に、ペーパー空間(シート ワークスペース)よりモデル空間(モデル ワークスペース)へ切り替える必...
-
第一關,...沒啥好寫的簡單 右鍵找出網頁原始碼之後就會看到密碼了 h4x0r ...NEXT
-
x64環境のSDKを使ってコンパイルするときに、GWL_WNDPROCなどシステムの定数が使えないことになります。 それは、SDKでは、x64環境であれば(#ifdef _win64)、それらの変数の定義をキャンセルした(undef)のです。 解決法として、GWL_WNDPROC...
-
大多數人使用iReport生成都會使用SQL來抓取資料庫檔案,但是iReport畢竟只是個設計表單用的程式,資料還是要靠Java餵給他。 一般的使用法,就像我以前做的 1. 在iReport中寫死SQL查詢句( SELECT xxx FROM yyy WHERE zzz )...
-
Access 2010の環境で開発する際、新しいファイル(ACCDB)は古いAccessでは使えないため、旧形式のMDBファイルに変換する必要性がある。 但し、変換されたファイルに、VBAコードはうまく変換できない/VBAコードが削除されることが多々ある。 故に、次のステッ...