• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            colorful

            zc qq:1337220912

             

            linux 下安裝luabind

              luabind需要boost 和lua, 請先安裝boost, lua
              luabind用到lua的動態庫,請在安裝lua時編譯出 liblua.so

              a: export BOOST_ROOT=/home/zc/tools/boost_1_48_0
              b: export LUA_PATH=/usr/local/
              c: bjam stage --toolset=gcc --with-date_time --with-fpic --with-filesystem link=static debug release  --這一步可以不要
              d: bjam install

            posted @ 2012-09-25 20:11 多彩人生 閱讀(902) | 評論 (0)編輯 收藏

            關于lua5.1.4找不到luaL_openlibs的問題

            忙了一下午,最后才發現是src/Makefile里少數據
            LUAC_T=    luac
            LUAC_O=    luac.o print.o
            LUA_SO= liblua.so

            ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O)
            ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
            ALL_A= $(LUA_A)

            default: $(PLAT)

            all:    $(ALL_T)

            o:    $(ALL_O)

            a:    $(ALL_A)

            $(LUA_A): $(CORE_O) $(LIB_O)
                $(AR) $@ $?
                $(RANLIB) $@

            $(LUA_T): $(LUA_O) $(LUA_A)
                $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)

            $(LUAC_T): $(LUAC_O) $(LUA_A)
                $(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS)

            $(LUA_SO):$(CORE_O) $(LIB_O)
                $(CC) -o $@ -shared -fPIC $? -ldl -lm

            posted @ 2012-09-25 19:53 多彩人生 閱讀(1916) | 評論 (0)編輯 收藏

            lua 安裝

            下載源文件
            tar zxvf lua.tar.gz
            make linux
            make install

            提示找不到readline/readline.h
            apt-get install libncurses5-dev libreadline5-dev

            posted @ 2012-09-25 14:23 多彩人生 閱讀(313) | 評論 (0)編輯 收藏

            VS2008下編譯luabind 0.8.1

                 學了一段時間Lua,顯然直接在項目中使用是很不方便,google了一下,似乎大家都對luabind這個lua包裝類青睞有加,于是我也隨大勢想用用看。
                 先做好準備工作,下載了luabin 0.8.1源碼,Boost 1.3.8源碼和lua 5.1.4源碼,編譯環境是VS2008 SP1。之前在網上看到一些文章說這些開源軟件之間的版本依賴比較敏感,可能會有這樣那樣的問題,動手之前有些惶恐。
                 幸運的是,編譯過程很順利,如下:
                 1.編譯lua 5.1.4
                 進入VS2008的命令行工具,定位到lua的源碼目錄下,執行命令etc\luavs.bat,沒什么問題的話很快就可以編譯好lua,得到lua51.lib和lua51.dll。
                 2.編譯luabind
                 解壓下載回來的luabind壓縮包,假設解壓到d:\luabind-0.8.1\,Boost解壓到d:\boost 1_38_0\,lua解壓到d:\lua 5.1.4\
                 在 VS中新建一個靜態庫項目,將d:\luabind-0.8.1\src下的源碼全部添加到項目中,然后在項目中新建luabind和luabind \detail\兩個虛擬文件夾,對應的將d:\luabind-0.8.1\luabind和d:\luabind-0.8.1\luabind \detail下的文件添加到文件夾中。
                 然后為項目添加附加包含目錄,右鍵點擊項目節點->屬性->配置屬性->C\C++標簽下,在附加包含目錄中填入d: \luabind-0.8.1\;d:\boost 1_38_0\k;d:\lua 5.1.4\src\。然后修改項目字符集為多字節字符集。
                 準備就緒,生成項目。在我的環境中編譯很順利,沒有出現任何問題,成功后會得到luabind.lib。

                 接下來就按照慣例來寫一個hello world程序作為使用luabind的第一步。
                 在VS中新建一個控制臺項目,類型為DLL,命名項目為Hello World,然后鍵入以下代碼:

             1#include "stdafx.h"
             2#include <iostream>
             3#include <luabind/luabind.hpp>
             4
             5void greet()
             6{
             7    std::cout << "hello world!\n";
             8}

             9
            10extern "C" int __declspec(dllexport) init(lua_State* L)
            11{
            12    using namespace luabind;
            13
            14    open(L);
            15
            16    module(L)
            17    [
            18        def("greet"&greet)
            19    ];
            20
            21    return 0;
            22}


               注意,在Windows環境下init函數之前是要加 __declspec(dllexport)才能將函數導出的,而luabind的文檔中的環境是linux,默認不用加 __declspec(dllexport)也可以導出(就因為這個折騰了我半天才把hello word成功運行)。
               編譯項目,(記得將luabind.lib和lua51.lib添加到鏈接選項中:項目屬性->連接器->輸入->附加依賴文件,加入luabind.lib和lua51.lib)。
               將hello world.dll放到lua51.dll和lua.exe所在的目錄下。
               打開lua命令行,鍵入:
                
               測試成功,enjoy。

            posted @ 2012-09-10 21:05 多彩人生 閱讀(243) | 評論 (0)編輯 收藏

            pg_ctl

            pg_ctl -- 啟動、停止、重啟 PostgreSQL
            2010-01-11 19:08

            pg_ctl

            名稱

            pg_ctl -- 啟動、停止、重啟 PostgreSQL

            語法

            pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
            pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
            pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
            pg_ctl reload [-s] [-D datadir]
            pg_ctl status [-D datadir]
            pg_ctl kill [signal_name] [process_id]
            pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
            pg_ctl unregister [-N servicename]

            描述

            pg_ctl 用于啟動、停止、重啟 PostgreSQL 后端服務器(postgres),或者顯示一個運行著的服務器的狀態。盡管可以手動啟動服務器,但是 pg_ctl 封裝了重新定向日志輸出,與終端和進程組合理分離,以及另外提供了一個選項用于有控制的關閉。

            start 模式里會啟動一個新的服務器。服務器是在后臺啟動的,標準輸入被附著到了 /dev/null 上。如果使用了 -l ,那么標準輸出和標準錯誤將被定向到一個日志文件,要么就是重定向到 pg_ctl 的標準輸出(而不是標準錯誤)。如果沒有選定日志文件,pg_ctl 的標準輸出應該重定向到一個文件或者用管道輸出到類似 rotatelogs 這樣的日志滾動程序,否則,postgres 將把它的輸出寫到控制終端(在后臺)并且將不會脫離 shell 的進程組。

            stop 模式下,那個正在特定數據目錄運行的服務器將被關閉。你可以用 -m 選項選擇三種不同的關閉模式:"Smart"模式等待所有客戶端中斷連接,這是缺省。"Fast"模式并不等待客戶端中斷連接,所有活躍事務都被回滾并且 客戶端都被強制斷開。"Immediate"模式將在沒有干凈關閉的情況下強行退出。這么做將導致在重新啟動的時候的恢復。

            restart 實際上是先執行一個停止,然后緊跟一個啟動。它允許變換 postgres 的命令行選項。

            reload 模式簡單地給 postgres 發送一個 SIGHUP 信號,導致它重新讀取配置文件(postgresql.conf, pg_hba.conf 等),這樣就允許修改配置文件選項而不用重啟系統即可生效。

            status 模式監查一個服務器是否在指定的數據目錄運行,如果是,那么顯示其 PID 和調用它的命令行選項。

            kill 模式允許你給一個指定的進程發送信號。這個功能對 Microsoft Windows 特別有用,因為它沒有 kill 命令。使用 --help 查看支持的信號名字列表。

            register 模式允許你在 Microsoft Windows 上注冊一個系統服務。

            unregister 模式允許你在 Microsoft Windows 上刪除先前用 register 命令注冊的系統服務。

            選項

            -D datadir

            聲明該數據庫的文件系統位置。如果忽略則使用 PGDATA 環境變量。

            -l filename

            把服務器日志輸出附加在 filename 文件上。如果該文件不存在則創建它。umask 設置為 077 ,因此缺省時是不允許從其它用戶向日志文件訪問的。

            -m mode

            聲明關閉模式。mode 可以是 smart, fast, immediate 之一,或者是這三個的首字母之一。

            -o options

            聲明要直接傳遞給 postgres 的選項。

            參數通常都用單或者雙引號包圍以保證它們作為一個整體傳遞。

            -p path

            聲明 postgres 可執行文件的位置。缺省位于 pg_ctl 自身所在目錄,如果沒找到則使用硬編碼的安裝目錄。除非你想干點什么特別的事情,并且想得到類似沒有找到 postgres 這樣的錯誤,否則必須使用這個選項。

            -s

            只打印錯誤,而不打印提示性信息。

            -w

            等待啟動或者關閉的完成(60 秒超時),這個參數是關閉時的缺省值。成功的關閉是以刪除 PID 文件為標志的。對于啟動而言,一次成功的 psql -l 就標志著成功。pg_ctl 將企圖使用對 psql 合適的端口,如果存在 PGPORT 環境變量,那么將用它。否則,它將查找在 postgresql.conf 文件里是否設置了一個端口。如果都沒有,它將使用 PostgreSQL 編譯時的缺省端口(缺省 5432)。在等待的時候,pg_ctl 將根據啟動或者關閉的成功狀況返回一個準確的退出代碼。

            -W

            不等待啟動或者停止的完成。這是啟動和重啟的缺省。

            posted @ 2012-08-15 18:14 多彩人生 閱讀(464) | 評論 (0)編輯 收藏

            精確獲取時間(QueryPerformanceCounter)

            LARGE_INTEGER tima,timb;
            QueryPerformanceCounter(&tima);

            在 Windows Server 2003 和 WindowsXP 中使用 QueryPerformanceCounter 函數的程序可能執行不當

            QueryPerformanceCounter 來精確計算執行時間
            QueryPerformanceCounter 來精確計算執行時間
            // 這個程式展示了如何使用QueryPerformanceCounter 來精確計算執行時間
            //代碼


             

            1. LARGE_INTEGER m_liPerfFreq={0};
            2.  //獲取每秒多少CPU Performance Tick
            3.  QueryPerformanceFrequency(&m_liPerfFreq); 

            4.  LARGE_INTEGER m_liPerfStart={0};
            5.  QueryPerformanceCounter(&m_liPerfStart);

            6.  for(int i=0; i< 100; i++)
            7.   cout << i << endl;

            8.  LARGE_INTEGER liPerfNow={0};
            9.  // 計算CPU運行到現在的時間
            10.  QueryPerformanceCounter(&liPerfNow);

            11.  int time=( ((liPerfNow.QuadPart - m_liPerfStart.QuadPart) * 1000)/m_liPerfFreq.QuadPart);

            12.  char buffer[100];
            13.  sprintf(buffer,"執行時間 %d millisecond ",time);

            14.  cout<<buffer<<endl;


            QueryPerformanceCounter()這個函數返回高精確度性能計數器的值,它可以以微妙為單位計時.但是 QueryPerformanceCounter()確切的精確計時的最小單位是與系統有關的,所以,必須要查詢系統以得到 QueryPerformanceCounter()返回的嘀噠聲的頻率.
            QueryPerformanceFrequency()提供了這個頻率值,返回每秒嘀噠聲的個數.
            計算確切的時間是從第一次調用QueryPerformanceCounter()開始的
            假設得到的LARGE_INTEGER為nStartCounter,過一段時間后再次調用該函數結束的,
            設得到nStopCounter.
            兩者之差除以QueryPerformanceFrequency()的頻率就是開始到結束之間的秒數.由于計時函數本身要耗費很少的時間,要減去一個很少的時間開銷.但一般都把這個開銷忽略.公式如下:   
                                     nStopCounter-nStartCounter
            ElapsedTime=------------------------------------ - overhead
            frequency

            double time=(nStopCounter.QuadPart-nStartCounter.QuadPart)/frequency.QuadPart

             

             

            這兩個函數是VC提供的僅供Windows 95及其后續版本使用的精確時間函數,并要求計算機從硬件上支持精確定時器。
            QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數的原型如下:

                   BOOL  QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);        BOOL  QueryPerformanceCounter(LARGE_INTEGER *lpCount);

              數據類型ARGE_INTEGER既可以是一個8字節長的整型數,也可以是兩個4字節長的整型數的聯合結構, 其具體用法根據編譯器是否支持64位而定。該類型的定義如下:

                   typedef union _LARGE_INTEGER        {            struct            {               DWORD LowPart ;// 4字節整型數               LONG  HighPart;// 4字節整型數            };            LONGLONG QuadPart ;// 8字節整型數                     }LARGE_INTEGER ;

              在進行定時之前,先調用QueryPerformanceFrequency()函數獲得機器內部定時器的時鐘頻率, 然后在需要嚴格定時的事件發生之前和發生之后分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差及時鐘頻率,計算出事件經 歷的精確時間。下列代碼實現1ms的精確定時:

             
            1.        LARGE_INTEGER litmp; 
            2.        LONGLONG QPart1,QPart2;
            3.        double dfMinus, dfFreq, dfTim; 
            4.        QueryPerformanceFrequency(&litmp);
            5.        dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鐘頻率
            6.        QueryPerformanceCounter(&litmp);
            7.        QPart1 = litmp.QuadPart;// 獲得初始值
            8.        do
            9.        {
            10.           QueryPerformanceCounter(&litmp);
            11.           QPart2 = litmp.QuadPart;//獲得中止值
            12.           dfMinus = (double)(QPart2-QPart1);
            13.           dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒
            14.        }while(dfTim<0.001);

              其定時誤差不超過1微秒,精度與CPU等機器配置有關。 下面的程序用來測試函數Sleep(100)的精確持續時間:

             
            1.        LARGE_INTEGER litmp; 
            2.        LONGLONG QPart1,QPart2;
            3.        double dfMinus, dfFreq, dfTim; 
            4.        QueryPerformanceFrequency(&litmp);
            5.        dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鐘頻率
            6.        QueryPerformanceCounter(&litmp);
            7.        QPart1 = litmp.QuadPart;// 獲得初始值
            8.        Sleep(100);
            9.        QueryPerformanceCounter(&litmp);
            10.        QPart2 = litmp.QuadPart;//獲得中止值
            11.        dfMinus = (double)(QPart2-QPart1);
            12.        dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒    

              由于Sleep()函數自身的誤差,上述程序每次執行的結果都會有微小誤差。下列代碼實現1微秒的精確定時:

             
            1.        LARGE_INTEGER litmp; 
            2.        LONGLONG QPart1,QPart2;
            3.        double dfMinus, dfFreq, dfTim; 
            4.        QueryPerformanceFrequency(&litmp);
            5.        dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鐘頻率
            6.        QueryPerformanceCounter(&litmp);
            7.        QPart1 = litmp.QuadPart;// 獲得初始值
            8.        do
            9.        {
            10.           QueryPerformanceCounter(&litmp);
            11.           QPart2 = litmp.QuadPart;//獲得中止值
            12.           dfMinus = (double)(QPart2-QPart1);
            13.           dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒
            14.        }while(dfTim<0.000001);

            其定時誤差一般不超過0.5微秒,精度與CPU等機器配置有關。(

            posted @ 2012-07-27 19:00 多彩人生 閱讀(528) | 評論 (0)編輯 收藏

            C/C++通用Makefile

            http://wenku.baidu.com/view/17a11ef8fab069dc502201d4.html
            http://wenku.baidu.com/view/a2429bd728ea81c758f578cd.html
            http://blog.csdn.net/fljing/article/details/6257867

            posted @ 2012-07-26 23:19 多彩人生 閱讀(300) | 評論 (0)編輯 收藏

            gcc的參數

            http://wuqinzhong.blog.163.com/blog/static/452223120095248474729/

            posted @ 2012-07-26 22:34 多彩人生 閱讀(240) | 評論 (0)編輯 收藏

            cannot pass objects of non-POD type

            移植代碼到Linux下,運行總是崩潰(在windows下正常)。
            調試發現問題出在下列語句:
               wxString szSiteHead = wxString::Format( wxT("<Location /%s>"), file.GetName() );
            查看編譯記錄有下列警告信息
               warning: cannot pass objects of non-POD type 'class wxString' through '...'; call will abort at runtime|
            提示在運行時會異常。
             
            查找 POD type定義如下:非原生類型
             
            POD stands for Plain Old Data - that is, a struct (or class) with no members except data members. Wikipedia goes into a bit more detail and defines a POD in C++ as "A Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defined copy assignment operator, and no nonstatic members of pointer-to-member type."
             
            代碼更改后OK。
            wxString szSiteHead = wxString::Format( wxT("<Location /%s>"), file.GetName().c_str() );

            ===================================================================================
            ctags: c++ warning "cannot pass objects of non-POD type"

            1、不要忽視編譯時的任何一個 Warning .2、正確使用輸入輸出流,避開高危函數。

            1、printf("Hello %s" ,str.c_str());
            2、cout<<str;

            string 非原生類型 non-POD,編譯器無法把它傳入.

            下面是一個網上的小例子。

            im trying to compile following code
            --------------------sam.cpp---------------------
            #include <string>
            #include <iostream>
            #include <stdarg.h>
            using namespace std;

            void Write( const char* msg, const char* msg2, ...)
            {
            cout <<msg <<" "<<msg2<<endl;
            }

            int main()
            {
            string str("World");
            Write("Hello","Debug out %s" ,str);
            return 0;
            }
            -------------------------------------------

            When i compile this code i get following compilation warning .

            [oracle@sahyagiri test]$ g++ sam.cpp
            sam.cpp: In function `int main()':
            sam.cpp:17: warning: cannot pass objects of non-POD
            type `struct std::string'
            through `...'; call will abort at runtime

            When i run the executable, a.out it fails with Illegal
            instruction eror

            posted @ 2012-07-26 12:45 多彩人生 閱讀(1254) | 評論 (0)編輯 收藏

            shell腳本中局部變量

            在shell中定義函數可以使代碼模塊化,便于復用代碼。不過腳本本身的變量和函數的變量的作用域問題可能令你費解,在這里梳理一下這個問題。

            (1)Shell腳本中定義的變量是global的,其作用域從被定義的地方開始,到shell結束或被顯示刪除的地方為止。

            例1:腳本變量的作用域
            #!/bin/bash
            #define the function ltx_func
            ltx_func()
            {
               echo $v1
               #modify the variable v1
               v1=200
            }
            #define the variable v1
            v1=100
            #call the function ltx_func
            ltx_func
            echo $v1

            結果:
            100
            200
            解析:腳本變量v1的作用域從被定義的地方開始,到shell結束。調用函數ltx_func的地方在變量v1的作用域內,所以能夠訪問并修改變量v1。

            (2)Shell函數定義的變量默認是global的,其作用域從“函數被調用時執行變量定義的地方”開始,到shell結束或被顯示刪除處為止。函數定義的變量可以被顯示定義成local的,其作用域局限于函數內。但請注意,函數的參數是local的。

            例2:函數定義的global變量
            #!/bin/bash
            #define the function ltx_func
            ltx_func()
            {
               #define the variable v2
               v2=200
            }
            #call the function ltx_func
            ltx_func
            echo $v2

            結果:
            200
            解析:函數變量v2默認是global的,其作用域從“函數被調用時執行變量定義的地方”開始,到shell結束為止。注意,不是從定義函數的地方開始,而是從調用函數的地方開始。打印命令在變量v2的作用域內,所以能夠訪問變量v2。

            例3:函數定義的local變量
            #!/bin/bash
            #define the function ltx_func
            ltx_func()
            {
               #define the local variable v2
               local v2=200
            }
            #call the function ltx_func
            ltx_func
            echo $v2

            結果:
            (空)
            解析:函數變量v2顯示定義為local的,其作用域局限于函數內。打印命令在函數外,不在變量v2的作用域內,所以能夠不能訪問變量v2。

            例4:函數參數是local變量
            #!/bin/bash
            #define the function ltx_func
            ltx_func()
            {
               echo "param 1: $1"
            }
            #call the function ltx_func
            ltx_func 100

            結果:
            100
            解析:函數參數是local的,通過位置變量來訪問。打印命令輸出函數的第一個參數。

            (3)如果同名,Shell函數定義的local變量會屏蔽腳本定義的global變量。

            例5:同名local變量屏蔽global變量
            #!/bin/bash
            #define the function ltx_func
            ltx_func()
            {
               echo $v1
               #define the local variable v1
               local v1=200
               echo $v1
            }
            #define the global variable v1
            v1=100

            #call the function ltx_func
            ltx_func
            echo $v1

            結果:
            100
            200
            100
            解析:global變量v1的作用域從被定義的地方開始,到shell結束。調用函數ltx_func的地方在變量v1的作用域內,所以能夠變量v1。函 數又定義了同名的local變量v1,同名local變量屏蔽global變量,所以函數第二次打印訪問的是local變量。退出函數后再次打印v1,此 時函數定義的local變量已經消失,訪問的是global變量。

            posted @ 2012-07-26 10:53 多彩人生 閱讀(381) | 評論 (0)編輯 收藏

            僅列出標題
            共25頁: First 9 10 11 12 13 14 15 16 17 Last 

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久99国产精品一区二区| 伊人久久大香线蕉影院95| 久久中文字幕精品| 日本强好片久久久久久AAA| 久久精品国产精品国产精品污| 久久er99热精品一区二区| 国产精品成人99久久久久91gav| 日韩精品久久久久久久电影| 国产精品久久久久久| 婷婷久久五月天| 精品国产综合区久久久久久| 久久精品欧美日韩精品| 人妻无码精品久久亚瑟影视| 久久精品国产免费一区| 一本一本久久A久久综合精品| 99久久国产亚洲高清观看2024| 7777久久久国产精品消防器材| 精品久久久久久久中文字幕| 99久久人妻无码精品系列蜜桃| 思思久久99热只有频精品66| 国内精品久久久久久久久| 久久er国产精品免费观看2| 综合人妻久久一区二区精品| 久久只这里是精品66| 欧美激情精品久久久久久久| 久久久久国产成人精品亚洲午夜| 国产亚洲欧美成人久久片| 亚洲色欲久久久综合网| 99久久99久久精品国产片果冻 | 精品国产一区二区三区久久蜜臀| 99精品国产综合久久久久五月天| 性高朝久久久久久久久久| 欧美一级久久久久久久大| 亚洲国产成人精品91久久久 | 国产精品久久久久9999| 久久精品亚洲一区二区三区浴池| 久久无码AV一区二区三区| 中文字幕无码av激情不卡久久| 欧美日韩成人精品久久久免费看| 久久精品女人天堂AV麻| 亚洲国产成人久久精品99|