TCPMP0.72RC1的編譯與移植以及自己另外做UI完整方法

我叫張挺,雖然開博,除了轉了一篇黃色文章以外,技術文章從來沒有寫,所以呢,感到很不好意思!于是決定還寫一篇在網上也留點痕跡。我這里主要是介紹TCPMP的移植以及如何把這個鳥鳥整到自己的界面中來.網上關于TCPMP的開發文章不是很多,有一點點呢,猶如JJ太短,不能深入;又或者不實用.今天呢,我先講如何編譯,然后講如何操控制.eMail:zt00@tom.com

?

一、編譯。

關于編譯,我是引用的別人的文章,我實驗過,確實可行。如下所言:

開發環境:windows?xp?sp2?+?EVC4.0(SP4)
目標平臺:Windows?CE5.0(ARMV4)

1.下載源碼,可以去http://picard.exceed.hu/tcpmp/下載TCPMP源代碼。我下載的源碼版本是0.72RC1。

2.編譯環境.我安裝的是evc4.2(SP4)+standard?sdk+Win32(WCE?ARMV4)?Release.如果是編譯x86或者Emulator版本的.要下載一個nasm匯編工具.這點在readme.txt里面提到.nasm的下載地址http://nasm.sourceforge.net/.否則的話會因為缺少匯編器而報大量的錯誤。

3.下載下來的源碼包中不包含ARM的解碼器源碼,可以從下面2個網址下載AMR的解碼器的源代碼:http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-610.zip?
http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-600.zip?
并且分別拷貝到AMR目錄下的26104和26204中。同樣,這個信息在readme.txt中提到。?????????????

4.準備ARM的匯編器,根據實踐經驗,從ARM官網上面下載下來的匯編器編譯時會報錯,不適合使用,建議使用VS2005的ARM匯編器ARMASM.EXE,將其拷貝到C:/Microsoft?eMbedded?C++?4.0/EVC/WCE400/BIN下面。

5.編譯的時候切勿rebuild?all,否則會報大量的錯誤,從Project—-Dependencies下來框里選擇player_ce3(主項目),可以看到子項目間的相互依賴關系,所以player_ce3是最后一個編譯的項目。隨便在下拉框中選擇一個子項目,在依賴項中都會發現common項目,說明該項目應該是首先需要進行編譯的,下面我們首先從common項目入手。

6.將player_ce3項目set?as?active?project,編譯版本直接選擇Win32?(WCE?ARMV4)?Release。這個項目將最后一個進行編譯,最終生成一個player_ce3.exe的應用程序,那我們的目標也就達成了。但編譯這個程序依賴許多的庫。這些庫就是其他的project編譯后提供的。

7.在EVC左邊的文件查看模式里首先選擇common?files,右鍵菜單Build(selection?only)進行common項目的編譯,會很順利的過去。接下來由上而下順序為子項目進行編譯,當然,在Project—-Dependencies中沒有關聯的項目不需要進行編譯(總共6項:player_ce2、sample_ce3、setup_ce2、setup_ce3、template、vorbislq),其它的把asap、flac、player_ce3三項放下來最后處理,這三項需要對編譯器進行額外配置,否則會報大量錯誤。不出意外的話,都會順利編譯過去。接下來我們需要處理剩下來的3個項目。

8.編譯asap項目。右鍵點asap?files?–>settings–>c/c++–>Category–>Preprocessor在Additional?include?directories:中增加項目路徑(注意這個是相對路徑,以下所有需添加內容都不包括引號)”.,asap,atari800/src”.不然一堆頭文件會找不到.在Preprocessor?definitions:中增加一個宏定義”,ASAP”當然這2步動作也可以在源代碼中修改.如此設置完畢后,asap?files?project就可以正確編譯了.?

9.編譯flac項目。同8,打開flac的settings到相同界面.在Additional?include?directories:中增加路徑”flac/include,flac/src/libFLAC/include”,不然一堆頭文件找不到。然后,在Preprocessor?definitions添加”,FLAC__NO_DLL”。增加這個定義避免使用_declspec(dllexport)定義函數造成的一大堆c2491錯誤.如此設置后,flac?project應該可以正確編譯.

10.同理修改player_ce3項目,在Additional?include?directories中增加路徑?”../asap/asap,../asap,../asap/atari800/src,flac/include,flac/src/libFLAC/include”。然后在Preprocessor?difinitions:增加”,ASAP”。這是最后一個項目文件,也是主項目文件,成功編譯player_ce3.exe。

11.?拷貝包含player_ce3.exe在內所有的生成文件到目標板上(所有文件必須放在同一個目錄中),可以運行!但是菜單沒有顯示正確。主要原因是現實語言配置文件沒有加載上去,可以將源碼lang目錄下面的多國語言支持文件拷貝到目標板同一個目錄下面。如果只需要簡體中文和英文的,只要拷貝lang_std.txt?lang_en.txt,lang_chs.txt,lang_ca.def四個文件(四個語言配置文件一定要和應用程序放在同一個目錄)就可以了,打開后默認顯示是英語,你可以更改到簡體中文,前提是你的CE平臺支持簡體中文。

我是在VS2005中用開發平臺的模擬器跑的,一切正常,就是播放不流暢,后期需要對這塊進行優化。

我也嘗試將其編譯到ARMV4I平臺上,結果也是可行的,不過由于的平臺的特殊性,有部分配置需要改動,也有部分插件不被支持,不過不影響使用,大體總結如下:

1.經驗總結表明在ARMV4I平臺的編譯工作中,TCPMP有部分模塊不被支持,編譯提示缺少相應文件。由于該部分不被支持的模塊不影響播放器的正常使用,可以在Project–Dependenties中下拉框中選擇player_ce3,然后將以下幾項前面的勾拿掉:ffmpeg、mpc、speex?這三項可以不必編譯。

2.Win32?(WCE?ARMV4I)?Debug及Release版本需要自己手動創建。在Build–Configurations里為每個子項目選擇ADD(上面提到的3項,和依賴項中不需要編譯的6項不必添加),CPU選擇Win32?(WCE?ARMV4I),在Copy?settings?from里選擇Win32?(WCE?ARMV4)?Release,然后選擇OK,你就為該子項目添加了相應編譯版本。

3.右擊需要編譯的子項目,選擇Settings–Link,在Category中選擇General,然后再下面Project?Options里將最后一行語句:/MACHINE:ARM?改成?/MACHINE:THUMB?(每個項目都必須要改)

4.其它步驟按照按照上文ARMV4的過程來就可以了,相應的修改也是需要的,先從common開始,以player_ce3結束。

經過以上過程,你就可以定制自己專用的TCPMP播放器了,可以在interface項目中更改TCPMP的外觀,當然,重頭工作還在于對于特定平臺的一些優化工作:)

?

二、關于控制TCPMP(張挺 zt00@tom.com)

說到控制,世界上很多東西需要控制,就象女人也同樣需要控制,控制的好,于是社會才能和諧!

?

1、讓TCPMP播放時能在我們自己指定的窗口.

呵呵,要真正讓TCPMP播放器在我們指定的窗口播放,是需要修改COMMON插件的.請同志們把COMMON設置成當前工程,然后把GetDC函數全部搜索出來,然后通通GetDC(Context()->Wnd)代替,并且ReleaseDC(NULL,DC)也通通用ReleaseDC(Context()->Wnd,DC)代替;然后編譯出來的插件就是我們需要的插件.只有這樣,才能使Context_Wnd(this->GetSafeHwnd())真正有效.

?

2、建立一個MFC的對話框工程.下面貼出代碼:

下載代碼請到:http://download.csdn.net/source/1229925

下面貼出主要代碼:

頭文件:

// TCPMP_MyUIDlg.h : header file
// 張挺 2009-04-20 eMail:zt00@tom.com

#if !defined(AFX_TCPMP_MYUIDLG_H__B5DD421B_AF1E_4678_AD26_08A3F0DE3087__INCLUDED_)
#define AFX_TCPMP_MYUIDLG_H__B5DD421B_AF1E_4678_AD26_08A3F0DE3087__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

//包含TCPMP的頭文件
#include "include/common.h"

/
// CTCPMP_MyUIDlg dialog

class CTCPMP_MyUIDlg : public CDialog
{
// Construction
public:
?CTCPMP_MyUIDlg(CWnd* pParent = NULL);?// standard constructor

// Dialog Data
?//{{AFX_DATA(CTCPMP_MyUIDlg)
?enum { IDD = IDD_TCPMP_MYUI_DIALOG };
?CSliderCtrl?m_sliderPlay;
?CStatic?m_TextOutLable;
?//}}AFX_DATA

?// ClassWizard generated virtual function overrides
?//{{AFX_VIRTUAL(CTCPMP_MyUIDlg)
?public:
?virtual BOOL DestroyWindow();
?protected:
?virtual void DoDataExchange(CDataExchange* pDX);?// DDX/DDV support
?//}}AFX_VIRTUAL

public:
?int m_TrackPos;
?CString m_TextOutStr,m_TotalTimeStr;

?BOOL m_bPlayOrPaulse;//"播放/暫停"標志

?player* m_Player;//操控TCPMP播放器的指針

?

?
?BOOL InitTcpmp();//初始化TCPMP


?CString TickToStringZhang(int Tick);//時間轉換

protected:
?HICON m_hIcon;

?// Generated message map functions
?//{{AFX_MSG(CTCPMP_MyUIDlg)
?virtual BOOL OnInitDialog();
?afx_msg void OnPlay();
?afx_msg void OnStop();
?//}}AFX_MSG

?afx_msg LRESULT PlayerEventMsg(WPARAM wParam, LPARAM lParam);

?DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft eMbedded Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TCPMP_MYUIDLG_H__B5DD421B_AF1E_4678_AD26_08A3F0DE3087__INCLUDED_)

?

下面是CPP文件:

// TCPMP_MyUIDlg.cpp : implementation file
//
// 張挺 2009-04-20 eMail:zt00@tom.com
#include "stdafx.h"
#include "TCPMP_MyUI.h"
#include "TCPMP_MyUIDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WM_PLAYER_EVENTMSG WM_USER + 1985//播放器事件消息

notify Notify;//通知

CWnd *g_pPlayerWnd =NULL;

int PlayerNotify(node* Player,int Param,int Param2)
{

?g_pPlayerWnd->PostMessage(WM_PLAYER_EVENTMSG,Param,(LPARAM)Param2);


?return ERR_NONE;
}


/
// CTCPMP_MyUIDlg dialog

CTCPMP_MyUIDlg::CTCPMP_MyUIDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTCPMP_MyUIDlg::IDD, pParent),m_bPlayOrPaulse(true)
{
?//{{AFX_DATA_INIT(CTCPMP_MyUIDlg)
?//}}AFX_DATA_INIT
?// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
?m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

?m_Player = NULL;

?m_TrackPos = 0;

}

void CTCPMP_MyUIDlg::DoDataExchange(CDataExchange* pDX)
{
?CDialog::DoDataExchange(pDX);
?//{{AFX_DATA_MAP(CTCPMP_MyUIDlg)
?DDX_Control(pDX, IDC_PERCENT, m_sliderPlay);
?DDX_Control(pDX, IDC_TIME, m_TextOutLable);
?//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTCPMP_MyUIDlg, CDialog)
?//{{AFX_MSG_MAP(CTCPMP_MyUIDlg)
?ON_BN_CLICKED(IDC_PLAY, OnPlay)
?ON_BN_CLICKED(IDC_STOP, OnStop)
?//}}AFX_MSG_MAP
?ON_MESSAGE(WM_PLAYER_EVENTMSG, PlayerEventMsg)
END_MESSAGE_MAP()

/
// CTCPMP_MyUIDlg message handlers

BOOL CTCPMP_MyUIDlg::OnInitDialog()
{
?CDialog::OnInitDialog();

?// Set the icon for this dialog.? The framework does this automatically
?//? when the application's main window is not a dialog
?SetIcon(m_hIcon, TRUE);???// Set big icon
?SetIcon(m_hIcon, FALSE);??// Set small icon
?
?CenterWindow(GetDesktopWindow());?// center to the hpc screen

?// TODO: Add extra initialization here
?g_pPlayerWnd = this;

?m_sliderPlay.SetRange(0,30000);

?InitTcpmp();


?return TRUE;? // return TRUE? unless you set the focus to a control
}


rect DefaultRect = {0,0,320,240};//播放電影窗口區域
tchar_t URL[] = _T("//SDMMC Card//TCPMP72NEW//008.mp4");//播放文件的路徑

//初始化TCPMP
BOOL CTCPMP_MyUIDlg::InitTcpmp()
{
?//初始化
?if(Context_Init(_T("TCPMP"),_T("0.72RC1"),3,(tchar_t*)AfxGetApp()->m_lpCmdLine,NULL))//
?{
??
??context* pContext=Context();//獲得上下文

??if(pContext)
???m_Player=(player*)(pContext->Player);
??else
???return false;
?

? ??Context_Wnd(this->GetSafeHwnd());//播放窗口關聯

??//設置通知處理函數
??Notify.Func = (notifyfunc)PlayerNotify;
??Notify.This = (void*)m_Player;

??if(m_Player)
???m_Player->Set(m_Player,PLAYER_NOTIFY,&Notify,sizeof(Notify));
?

??int i = 0;
??m_Player->Set(m_Player,PLAYER_LIST_COUNT,&i,sizeof(int));//播放列表清空

??m_Player->Set(m_Player,PLAYER_LIST_URL+0,URL,sizeof(URL));

??m_Player->Set(m_Player,PLAYER_SKIN_VIEWPORT,&DefaultRect,sizeof(rect));//設置播放電影窗口區域

??int index = 0;
??m_Player->Set(m_Player,PLAYER_LIST_CURRIDX,&index,sizeof(int));//設置播放列表里的某個文件為當前播放文件

??m_Player->Set(m_Player,PLAYER_PLAY,&m_bPlayOrPaulse,sizeof(BOOL));//開始播放

?}
?else
??return false;

?return true;

}

void CTCPMP_MyUIDlg::OnPlay()//播放/暫停
{

?if(m_Player)
?{

??m_bPlayOrPaulse = !m_bPlayOrPaulse;
??
??m_Player->Set(m_Player,PLAYER_PLAY,&m_bPlayOrPaulse,sizeof(BOOL));

?}


?
}

void CTCPMP_MyUIDlg::OnStop()//停止
{

?if(m_Player)
??m_Player->Set(m_Player,PLAYER_STOP,NULL,0);

}

BOOL CTCPMP_MyUIDlg::DestroyWindow()//程序退出
{

?if(m_Player)
?{
????
??Context_Wnd(NULL);
?
??Context_Done();

??::Sleep(200);
?}

?return CDialog::DestroyWindow();
}

CString CTCPMP_MyUIDlg::TickToStringZhang(int Tick)
{
?if (Tick<0)
??Tick = -Tick;
?
?int Hour,Min,Sec;?

?Hour = Tick / 3600 / TICKSPERSEC;//獲得小時
?Tick -= Hour * 3600 * TICKSPERSEC;
?Min = Tick / 60 / TICKSPERSEC;//獲得分鐘
?Tick -= Min * 60 * TICKSPERSEC;
?Sec = Tick / TICKSPERSEC;//獲得秒鐘
?Tick -= Sec * TICKSPERSEC;

?CString strTime;

?strTime.Format(_T("0%d:%d:%d"),Hour,Min,Sec);
?if(Min<10)
??strTime.Insert(3,'0');
?if(Sec<10)
??strTime.Insert(strTime.GetLength()-1,'0');

?return strTime;
}

LRESULT CTCPMP_MyUIDlg::PlayerEventMsg(WPARAM wParam, LPARAM lParam)
{
?fraction f;
?int Msg_Id = (int)wParam;
?int Msg_Status = (int)lParam;


?switch(Msg_Id)
?{
?case PLAYER_PERCENT:

??if(Msg_Status == 1)
??{?
???m_Player->Get(m_Player,PLAYER_PERCENT,&f,sizeof(fraction));
???m_TrackPos = Scale(30000,f.Num,f.Den);

???if(m_TrackPos>=29700)
????m_TrackPos = 30000;

????m_sliderPlay.SetPos( m_TrackPos );

???tick_t Time =0;
?//??tchar_t Dur[32];
???if (m_Player->Get(m_Player,PLAYER_POSITION,&Time,sizeof(tick_t)) == ERR_NONE)//PLAYER_DURATION
???{
????
???}
???else
???{
????
???}
???m_TextOutStr.Empty();
???m_TextOutStr=TickToStringZhang(Time);
???m_TextOutStr+=_T("/");
???m_TextOutStr+=m_TotalTimeStr;
???//m_TextOutStr+=_T(" ");
???//m_TextOutStr+=m_TitleNameStr;

???m_TextOutLable.SetWindowText(m_TextOutStr);
??}

??break;
?case PLAYER_PLAY:

??break;
?case PLAYER_TITLE:

??break;
?default:
??break;

??
?}

?return true;

}

?

呵呵,請結合代碼進行查看,一切變的很簡單!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454008.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

svga文件如何查看_電腦隱藏文件?如何查看隱藏文件 方法簡單易學

大家好&#xff0c;我是小白一鍵重裝軟件的客服。如何查看隱藏文件呢&#xff1f;有時候不小心把文件夾勾選隱藏后文件就消失了&#xff0c;到底是怎么回事呢&#xff1f;其實這個是電腦上面一些設置開啟了文件隱藏的功能哦&#xff0c;那么下面小白系統帶你了解下如何查看隱藏…

jquery 的animate 的transform

$(function(){ var t 1000; $("#id").animate( {borderSpacing:180}, //180 指旋轉度數 { step: function(now,fix){ $(this).css(-webkit-transform,rotate(nowdeg)); $(this).css(-ms-transform,rotate(nowdeg)); $(this).css(-moz-transform,rotate(nowdeg)); $(…

前端之 BOM 和 DOM

前言 到目前為止&#xff0c;我們已經學過了JavaScript的一些簡單的語法。但是這些簡單的語法&#xff0c;并沒有和瀏覽器有任何交互。也就是我們還不能制作一些我們經常看到的網頁的一些交互&#xff0c;我們需要繼續學習BOM和DOM相關知識。 JavaScript分為 ECMAScript&…

如何給FLV文件加字幕

如何給FLV文件加字幕關鍵字&#xff1a;FFMPEG AVS 字幕 本文只是收集工作中的一點經驗和積累&#xff0c;如果你能從本文中得到收獲&#xff0c;或者得到啟發。那將是我最開心的事情。 本文面向的讀者是對FFMPEG以及AVS有一定基礎的&#xff0c;對電腦有一定基礎的&#xff…

化工圖紙中LISP_必備干貨丨石油化工安裝工程質量與成本控制研究

對于整個石油化工工程來說&#xff0c;石油化工的安裝工程在其中是最重要并且最核心的一個環節&#xff0c;其對石油化工工程的質量有著決定性的作用。從客觀的角度來說&#xff0c;如果石油化工安裝工程在實際的施工過程中出現任何的問題&#xff0c;就會威脅到周邊人群的生命…

[原創]windows server 2012 AD架構 試驗 系列 – 15解決AD復制沖突

[原創]windows server 2012 AD架構 試驗 系列 – 15解決AD復制沖突 這節我詳細說下 ADDS使用stamp來作為解決沖突的依據 Stamp由三塊組成 Version, time stamp , source DC GUID (發生對象修改行為的源DC的GUID) 一般來說沖突分為幾下情況: 1-屬性沖突 你可以用repadmin來查看版…

Python全局變量和局部變量

全局變量和局部變量 定義在函數內部的變量擁有一個局部作用域&#xff0c;定義在函數外的擁有全局作用域。   局部變量只能在其被聲明的函數內部訪問&#xff0c;而全局變量可以在整個程序范圍內訪問。調用函數時&#xff0c;所有在函數內聲明的變量名稱都將被加入到作用域中…

前端之 jQuery 入門

jQuery介紹 jQuery是一個輕量級的、兼容多瀏覽器的JavaScript庫。jQuery使用戶能夠更方便地處理HTML Document、Events、實現動畫效果、方便地進行Ajax交互&#xff0c;能夠極大地簡化JavaScript編程。它的宗旨就是&#xff1a;“Write less, do more.“ jQuery的優勢 一款輕…

python劍指offer替換空格_迷人的算法-劍指offer面試題5:替換空格

題目&#xff1a;請實現一個函數&#xff0c;把字符串中的每個空格替換成"%20"。例如&#xff0c;輸入"We are happy."&#xff0c;則輸出"We%20are%20happy."。此題看似簡單&#xff0c;實則坑還是比較多的。替換字符的長度有變化&#xff0c;由…

音頻視頻解決方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

音頻視頻編程相關&#xff1a;GStreamer/ffmpeg/directshow/vfw linux和window下幾種流行的音頻視頻編程框架作一個總結&#xff0c;防止自己迷惘&#xff0c;免于暈頭轉向。 一、GStreamer GStreamer is a library that allows the construction of graphs of media-handlin…

Linux 將進程放入后臺執行,解決網絡,ssh斷開導致進程結束(nohup, setsid, , disown)...

Linux 將進程放入后臺執行&#xff0c;解決網絡&#xff0c;ssh斷開導致進程結束&#xff08;nohup, setsid, &, disown&#xff09; 1、nohup 命令 我們知道&#xff0c;當用戶注銷&#xff08;logout&#xff09;或者網絡斷開時&#xff0c;終端會收到 HUP&#xff08;…

bzoj1927

1927: [Sdoi2010]星際競速Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2556 Solved: 1580[Submit][Status][Discuss] Description 10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一&#xff0c;奪得這個項目的冠軍無疑是很多人的夢想&#xff0c;來自杰…

python until怎么用_python基礎之從認識python到python的使用

python的歷史&#xff1a;python的創始人是吉多范羅蘇姆(Guido van Rossum)&#xff0c;人稱“龜叔”&#xff0c;1989年圣誕節期間&#xff0c;Guido開始寫Python語言的編譯器。他希望這個叫做Python的語言能符合他的理想&#xff1a;創造一種C和shell之間&#xff0c;功能全面…

前端之同源策略 Jsonp 與 CORS

同源策略 同源策略&#xff08;Same origin policy&#xff09;是一種約定&#xff0c;它是瀏覽器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的&#xff0c;瀏覽器只是針對同…

vue新手入門——vue-cli搭建

首先說明&#xff0c;以下內容vue官網都有文檔&#xff0c;如果覺得麻煩啰嗦&#xff0c;請移步至 安裝-vue.js 。 準備工作&#xff1a; 1.下載并安裝node環境&#xff0c;一般情況下安裝好node之后&#xff0c;npm也會安裝好。具體安裝的話&#xff0c;百度大概能幫得上忙。 …

如何看懂源代碼–(分析源代碼方法)

我們在寫程式時&#xff0c;有不少時間都是在看別人的代碼。例如看小組的代碼&#xff0c;看小組整合的守則&#xff0c;若一開始沒規劃怎么看&#xff0c; 就會“嚕看嚕苦&#xff08;臺語&#xff09; ” 不管是參考也好&#xff0c;從開源抓下來研究也好&#xff0c;為了了解…

linux關于安裝

一&#xff0e;安裝gcc gcc cloog-ppl ppl(libppl.so.7/libppl_c.so.2) cpp mpfr(libmpfr.so.1) gcc-c libstdc-devel mpfr-2.4.1-6.el6.i686.rpm和ppl-0.10.2-11.el6.i686.rpm 快捷鍵rz sz&#xff1a; rz、sz命令沒找到&#xff1f; 安裝lrzsz即可&#xff1a; shell># y…

python cmath模塊_cmath模塊-PYTHON

這是一個float型的常數>>> cmath.e2.718281828459045>>> type(cmath.e)文檔>>> import cmath>>> help(cmath)Help on module cmath:NAMEcmathFILE/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cm…

Python 第三方模塊之 pdfkit

pdfkit&#xff0c;把 HTMLCSS 格式的文件轉換成 PDF 格式文檔的一個工具。 其實&#xff0c;pdfkit 是 html 轉成 pdf 工具包 wkhtmltopdf 的 Python 封裝。所以&#xff0c;首先安裝 wkhtmltopdf 。 一般情況下&#xff0c;wkhtmltopdf需要手動安裝&#xff0c;網站是 https…

LNMP環境添加第三方模塊

一.在LNMP環境下添加memcache模塊 1.安裝依賴庫(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…