poco庫編譯
⑴ codeblocks中怎麼用第三方庫,比如ACE,ICE,POCO,QT等
我是這么做的,可還是不行。在新建工程,設置好lib和h的搜索路徑後,我最先選用gnu的gcc作為編譯器,它居然說不能識別h文件中定義的類(但是它能找到h文件),於是編譯不過。
而後我選擇了vs作為cb編譯器,如法炮製,編譯通過了,但是出了一個外部連接錯誤。但只要是在VS IDE中作這些事就能行。
⑵ vs2010怎麼安裝poco庫
安裝步驟:
1. 下載源碼包。在POCO的官方網站下載最新的POCO源碼包。http://pocoproject.org/download/index.html
2.解壓源碼包。下載的文件名是「poco-1.4.2.zip」,將其解壓在F:\POCO目錄下。
3.編譯庫文件。開始菜單–Microsoft Visual Studio 2010–Visual Studio Tools—Open Visual Studio 2010 Command Prompt 打開命令行窗口。cd命令進入poco根目錄,F:\POCO\poco-1.4.2。輸入命令:buildwin 100 回車。
4.等待編譯完成,花費了一個多小時。
5.設置環境變數。POCO_HOME F:\POCO\poco-1.4.2
6.添加Include目錄。打開工程屬性頁,在「Configuration Properties -> C/C++ -> General -> Additional Include Directories」欄目中添加「$(POCO_HOME)\Foundation\include」,確認並應用該設置。
7.添加lib鏈接庫。打開屬性頁,在「Configuration Properties -> Linker -> General -> Additional Library Directories」欄目中添加lib目錄路徑$(POCO_HOME)\lib。在「Configuration Properties -> Linker -> Input -> Additional Dependencies」中添加應用程序需要用到的lib文件。
8.更改輸出路徑,以便項目生成的應用程序能夠調用DLL文件。打開工程屬性,將「Configuration Properties -> General -> Output Directory」改為「$(POCO_HOME)\bin」;將「Configuration Properties -> Debugging -> Working Directory」改為「$(OutDir)」。
9.設置完成後,重啟Visual Studio。
⑶ 基於POCO框架的C程序怎麼編譯
下面簡單介紹一下方法,以 vs2010 為例。
第一種方法:
(1) Poco 根目錄下有build_vs100.cmd和buildwin.cmd這兩個批處理文件, 我們得修改一下它們。
把build_vs100.cmd 修改為以下內容:
@echo off
if defined VS100COMNTOOLS (
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vsvars64.bat")
buildwin 100 build all both x64 samples
紅色的部分是vsvars64.bat的路徑,具體要看本機的安裝位置。這里因為是要編譯X64,所以要修改環境。
藍色部分是執行編譯時候的參數(注意X64的X要小寫)。參數的具體說明為:
buildwin VS_VERSION [ACTION] [LINKMODE] [CONFIGURATION] [PLATFORM] [SAMPLES] [TESTS] [TOOL]
VS_VERSION: 71|80|90|100|110
ACTION: build|rebuild|clean
LINKMODE: static_mt|static_md|shared|all
CONFIGURATION: release|debug|both
PLATFORM: Win32|x64|WinCE
SAMPLES: samples|nosamples
TESTS: tests|notests
TOOL: devenv|vcexpress|msbuild
具體的參數選擇根據需求。
如果不需要 NetSSL_OpenSSL 和 Mysql ,此時保存後就雙擊它就行了。 它會自動編譯好各種庫。
如果要NetSSL_OpenSSL 這個庫則打開buildwin.cmd文件:
設置 openssl 的路徑,如:
set OPENSSL_DIR=c:\OpenSSL-Win64
set OPENSSL_INCLUDE=%OPENSSL_DIR%\include
set OPENSSL_LIB=%OPENSSL_DIR%\lib;%OPENSSL_DIR%\lib\VC
set INCLUDE=%INCLUDE%;%OPENSSL_INCLUDE%
set LIB=%LIB%;%OPENSSL_LIB%
注意,如果要 Poco 中的 MySQL 庫 還得安裝. Mysql
編輯好後,雙擊 build_vs100.cmd執行編譯。完成後會在Poco根目錄下的lib64中看到編譯好的庫。在bin64中有編譯好的dll。
⑷ POCO怎麼使用
Poco是國內領先的多媒體資源共享軟體,是數聯公司網路富集技術的綜合應用產品之一。Poco為國內用戶及廣大華語地區用戶提供了一個適合中文環境的文件交換平台,完全支持中文軟體及中文關鍵字搜索並,並實現真正意義上的多點傳輸,傳輸效率大大提高。使用Poco軟體,不僅能夠搜索和下載海量的音樂、影視、圖片、軟體、游戲等資源,更可以使用內置的 IM(即時通信)系統方便、快捷的與好友一起分享。著重人性化的設計、充分考慮用戶的需求,我們相信Poco將會成為您網路生活中必不可少的工具之一。
Poco的特點:
海量資源 看看你的胃口有多大!目前Poco擁有超過6,000,000M的音樂、電影、軟體、游戲、圖片、書籍等資源,完全支持中文搜索,符合華語用戶的使用需求,是全球華語用戶最佳的多媒體資源共享平台!
急速下載!
Poco實現的真正的多點傳輸功能,徹底打破了傳統網路結構對中心伺服器效能及帶寬的限制,使用的人員越多,傳輸效率越高,使您真正體會急速下載的快感!
即時通信
是不是覺得下載的過程很乏味呢?沒關系,Poco還整合了IM(即時通信)系統,不但能夠結識更多的朋友,更可以通過IM的「推薦」功能,將喜愛的資源及時與朋友一起分享,下載過程將會變得充滿樂趣!
輕松擁有個性化主頁
想馬上擁有一個屬於您自己的個性化主頁么?MyPoco可以滿足您的需要。超炫的界面、顏色可隨信調配、版面可以自由控制和拖動、無須懂得任何編程語言,MyPoco將會是您展示個人魅力的最佳平台!
Poco2005新版本功能
全新界面,採用流行的DHTML界面。支持多種特效。簡約設計風格,特出軟體界面空間的利用。傻瓜型的界面引導風格更切合用戶習慣,改用最常用的類似網頁的導航方式。讓用戶操作一目瞭然。
拖動即搜功能,只要在poco瀏覽器瀏覽網頁時候通過拖動來選定指定的內容,即可看到提示框,選擇類型即可搜索。
突出在線功能,高速mp3全面採用流媒體技術,優化搜索技術,做到即搜即播(但由於來源太多,可能要多選定幾次,總有驚喜)電影採用poco獨有的分時下載播放技術,全面解決網路瓶頸
⑸ 現代C/C++編譯器有多智能
最近在搞C/C++代碼的性能優化,發現很多時候自以為的優化其實編譯器早就優化過了,得結合反匯編才能看出到底要做什麼樣的優化。
請熟悉編譯器的同學結合操作系統和硬體談一談現代c/c++編譯器到底有多智能吧。哪些書本上的優化方法其實早就過時了?
以及程序員做什麼會讓編譯器能更好的自動優化代碼?
舉個栗子:
1,循環展開,大部分編譯器設置flag後會自動展開;
2,順序SIMD優化,大部分編譯器設置flag後也會自動優化成SIMD指令;
3,減少中間變數,大部分編譯器會自動優化掉中間變數;
etc.
查看代碼對應的匯編:
Compiler Explorer
【以下解答】
舉個之前看過的例子:
int calc_hash(signed char *s){ static const int N = 100003; int ret = 1; while (*s) { ret = ret * 131 + *s; ++ s; } ret %= N; if (ret < 0) ret += N; //注意這句 return ret;}
【以下解答】
舉個簡單例子,一到一百求和
#include int sum() { int ret= 0; int i; for(i = 1; i <= 100; i++) ret+=i; return ret;}int main() { printf("%d\n", sum()); return 0;}
【以下解答】
話題太大,碼字花時間…
先放傳送門好了。
請看Google的C++編譯器組老大Chandler Carruth的演講。這個演講是從編譯器研發工程師的角度出發,以Clang/LLVM編譯C++為例,向一般C++程序員介紹理解編譯器優化的思維模型。它講解了C++編譯器會做的一些常見優化,而不會深入到LLVM具體是如何實現這些優化的,所以即使不懂編譯原理的C++程序員看這個演講也不會有壓力。
Understanding Compiler Optimization - Chandler Carruth - Opening Keynote Meeting C++ 2015
演示稿:https://meetingcpp.com/tl_files/mcpp/2015/talks/meetingcxx_2015-understanding_compiler_optimization_themed_.pdf
錄像:https://www.youtube.com/watch?v=FnGCDLhaxKU(打不開請自備工具…)
Agner Fog寫的優化手冊也永遠是值得參考的文檔。其中的C++優化手冊:
Optimizing software in C++ - An optimization guide for Windows, linux and Mac platforms - Agner Fog
要稍微深入一點的話,GCC和LLVM的文檔其實都對各自的內部實現有不錯的介紹。
GCC:GNU Compiler Collection (GCC) Internals
LLVM:LLVM』s Analysis and Transform Passes
========================================
反模式(anti-patterns)
1. 為了「優化」而減少源碼中局部變數的個數
這可能是最沒用的手工「優化」了。特別是遇到在高級語言中「不用臨時變數來交換兩個變數」這種場景的時候。
看另一個問題有感:有什麼像a=a+b;b=a-b;a=a-b;這樣的演算法或者知識? - 編程
2. 為了「優化」而把應該傳值的參數改為傳引用
(待續…)
【以下解答】
推薦讀一讀這里的幾個文檔:
Software optimization resources. C++ and assembly. Windows, Linux, BSD, Mac OS X
其中第一篇:http://www.agner.org/optimize/optimizing_cpp.pdf
講解了C++不同領域的優化思路和問題,還有編譯器做了哪些優化,以及如何代碼配合編譯器優化。還有優化多線程、使用向量指令等的介紹,推薦看看。
感覺比較符合你的部分需求。
【以下解答】
一份比較老的slides:
http://www.fefe.de/source-code-optimization.pdf
【以下解答】
利用C++11的range-based for loop語法可以實現類似python里的range生成器,也就是實現一個range對象,使得
for(auto i : range(start, stop, step))
【以下解答】
我覺得都不用現代。。。。寄存器分配和指令調度最智能了
【以下解答】
每次編譯poco庫的時候我都覺得很為難GCC
【以下解答】
有些智能並不能保證代碼變換前後語義是等價的
【以下解答】
誒誒,我錯了各位,GCC是可以藉助 SSE 的 xmm 寄存器進行優化的,經 @RednaxelaFX 才知道應該添加 -march=native 選項。我以前不了解 -march 選項,去研究下再來補充為什麼加和不加區別這么大。
十分抱歉黑錯了。。。以後再找別的點來黑。
誤導大家了,實在抱歉。(??ˇ?ˇ??)
/*********以下是並不正確的原答案*********/
我是來黑 GCC的。
最近在搞編譯器相關的活,編譯OpenSSL的時候有一段這樣的代碼:
BN_ULONG a0,a1,a2,a3; // EmmetZC 註:BN_ULONG 其實就是 unsigned longa0=B[0]; a1=B[1]; a2=B[2]; a3=B[3];A[0]=a0; A[1]=a1; A[2]=a2; A[3]=a3;
【以下解答】
提示:找不到對象
【以下解答】
忍不住抖個機靈。
私以為正常寫代碼情況下編譯器就能優化,才叫智能編譯器。要程序員絞盡腦汁去考慮怎麼寫代碼能讓編譯器更好優化,甚至降低了可讀性,那就沒有起到透明屏蔽的作用。
智能編譯器應該是程序猿要較勁腦汁才能讓編譯器不優化。
理論上是這樣的。折疊我吧。
【以下解答】
編譯器智能到每次我都覺得自己很智障。
【以下解答】
雖然題主內容里是想問編譯器代碼性能優化方面的內容,但題目里既然說到編譯器的的智能,我就偏一下方向來說吧。
有什麼更能展示編譯器的強大和智能?
自然是c++的模版元編程
template meta programming
簡單解釋的話就是寫代碼的代碼,寫的還是c++,但能讓編譯器在編譯期間生成正常的c++代碼。
沒接觸過的話,是不是聽上去感覺就是宏替換的加強版?感覺不到它的強大呢?
只是簡單用的話,效果上這樣理解也沒什麼
但是一旦深入下去,尤其翻看大神寫的東西,這明明看著就是c++的代碼,但TM怎麼完全看不懂他在干什麼?後來才知道這其實完全是另外一個世界,可是明明是另外一個世界的東西但它又可以用來做很多正常c++能做的事....
什麼?你說它好像不能做這個,不能做那個,好像做不了太多東西,錯了,大錯特錯。就像你和高手考試都考了100分的故事一樣,雖然分數一樣,但你是努力努力再努力才得了滿分,而高手只是因為卷面分只有100分.....在元編程面前,只有想不到,沒有做不到。
再回頭看看其他答案,編譯器順手幫你求個和,丟棄下無用代碼,就已經被驚呼強大了,那模板元編程這種幾乎能在編譯期直接幫你「生成」包含復雜邏輯的c++代碼,甚至還能間接「執行」一些復雜邏輯,這樣的編譯器是不是算怪獸級的強大?
一個編譯器同時支持編譯語法相似但結果不同卻又關聯的兩種依賴語言,這個編譯器有多強大多智能?
寫的人思維都要轉換幾次,編譯器轉著圈嵌著套翻著番兒地編譯代碼的代碼也肯定是無比蛋疼的,你說它有多強大多智能?
一個代碼創造另外一個代碼,自己能按照相似的規則生成自己,是不是聽上去已經有人工智慧的發展趨勢了?
上帝說,要有光,於是有了光。
老子曰,一生二,二生三,三生萬物。
信c++,得永生!
===
FBI WARNING:模板元編程雖然很強大,但也有不少缺點,尤其對於大型項目,為了你以及身邊同事的身心健康,請務必適度且謹慎的使用。勿亂入坑,回頭是岸。
【以下解答】
c++11的auto自動類型推斷算么....
【以下解答】
智能到開不同級別的優化,程序行為會不同 2333
【以下解答】
這個取決於你的水平
⑹ POCO庫中文編程參考指南(10)如何使用TCPServer框架
Author: 柳大·Poechant(鍾超)Email: [email protected]: Blog.CSDN.net/PoechantDate: April 21th, 20121 TCPServer 框架概述POCO 庫提供TCPServer框架,用以搭建自定義的 TCP 伺服器。TCPServer維護一個連接隊列、一個連接線程池。連接線程用於處理連接,連接線程只要一空閑就不斷地從連接隊列中取連接並進行處理。一旦連接線程從連接隊列中取到一個連接,就會創建一個TCPServerConnection連接對象,並且調用該對象的start()方法,直到start()方法返回,這個連接對象就被刪除了。連接線程的數量是動態的,其取決於連接隊列中排隊的連接數。當然,你使用的時候可以設定連接隊列的最大容量,以防止在高並發應用的伺服器上出現連接太多而使連接隊列溢出的悲劇發生。當連接隊列滿了,卻還有新的連接到來時,新來的連接就會被立即悄無聲息地關閉。// PoechantTCPConnection.h #ifndef POECHANT_TCP_CONNECTION_H #define POECHANT_TCP_CONNECTION_H #include "Poco/Net/TCPServerConnection.h" #include "Poco/Net/StreamSocket.h" #include <string> class PoechantTCPConnection: public TCPServerConnection { public: PoechantTCPConnection(const StreamSocket& s, const std::string& arg1, int arg2, double arg3); void run(); private: std::string _arg1; int _arg2; double _arg3; }; #endif 實現如下:// PoechantTCPConnection.cpp #include "PoechantTCPConnection.h" #include "Poco/Util/Application" #include "Poco/Timestamp.h" #include "Poco/Exception.h" #include "Poco/DateTimeFormatter.h" PoechantTCPConnection(const StreamSocket& s, const std::string& arg1, int arg2, double arg3): TCPServerConnection(s), _arg1(arg1), _arg2(arg2), _arg3(arg3) { } void run() { Application& app = Application::instance(); // 日誌輸出連接的TCP用戶的地址(IP和埠) app.logger().information("Request from " + this->socket().peerAddress().toString()); try { // 向客戶端發送數據,這里以發送一個表示時間的字元串為例 Timestamp now; std::string dt(DateTimeFormatter::format(now, _format)); dt.append("\r\n"); socket().sendBytes(dt.data(), (int) dt.length()); } catch (Poco::Exception& e) { app.logger().log(e); } } 2.3 PoechantTCPConnectionFactory工廠模式不必多說,名字唬人,其實非常非常簡單(准確的說設計模式大部分名字都唬人,但大部分都很有用,設計模式本身並不牛B,能把設計模式抽象提煉出來成我們現在認為很簡單的這些模式的那幾個人很牛B)。
⑺ POPC是一個怎樣的項目
隨著全世界區塊鏈技術的不斷發展和應用的不斷深入,根據行業發展報告的數據,中國區塊鏈行業發展迅猛。區塊鏈應用范圍廣闊,得益於區塊鏈技術的持續創新,以及中國龐大的互聯網消費群體,區塊鏈應用在中國也呈現出多元廣泛、積極活躍的特點。
因看準中國廣闊的市場,POPC決定強勢入駐中國市場。POPC來自美國,是美國Point-of-purchase(pop)ad 股份有限公司根據對區塊鏈技術在廣告行業的落地應用而發起的「區塊鏈+廣告」項目,目前已經先後在加拿大、新加坡、中國、日本等國家和地區成立了分公司。
POPC是一個智能、透明、開放誠信的廣告生態,是區塊鏈技術在廣告領域的創新應用。將底層區塊鏈技術封裝,提供給各廣告平台、傳媒平台接入;同時提供智能合約設定、智能合約觸發、自動分賬、數據上鏈、數據查詢等各項服務。
POPC利用區塊鏈技術,使用去中心化的共識方式為內容生產領域進行貢獻定價和權益回報的網路,使內容生產者、內容投資者、內容消費者都能得到合理的激勵與回報,廣告商也能在平台上實現精準營銷。(微X:lyczlw)
我們正處於信息化與智能化的交融時代,全球首個基於區塊鏈生態價值共享廣告平台的發布,必將更加有力的促進POPC的高速流轉和交易,最終帶來新一輪的數字經濟革命,對我們的生產和生活方式產生最深遠的影響。
⑻ 怎麼在mingw環境下編譯安裝poco庫
.vs編譯安裝的話,直接運行那些bat腳本就可以了,但MinGW肯定不行,所以需要用到MSYS
2.解壓poco-1.4.6p2,比如:D:/mysdk/poco-1.4.6p2,在MSYS的命令行中輸入「cd
/d/mysdk/poco-1.4.6p2」回車,就到了poco-1.4.6p2的解壓目錄了,具體你解壓的目錄路徑可以根據實際情況修改;
3.configure poco-1.4.6p2
linux裡面要配置編譯參數,我們可以通過「./configure
--help」查看有哪些編譯項。我們要使用MinGW編譯poco就必須在configure時指明是MinGW,我的configure命令如下(大家根據自己的實際情況修改):
./configure --config=MinGW --shared --static --no-test --no-samples
--omit=Crypto,NetSSL_OpenSSL,Data/ODBC,Data/MySQL
簡單解釋:--config=MinGW表示我採用MinGW編譯poco,--shared
--static表示編譯生成動態庫(dll)和靜態庫(a),omit=...表示編譯時不生成這些庫,因為我本機沒裝ssl、mysql,odbc需要lib,會影響我編譯,所以我去掉了這4個庫;
4.修改MinGW的編譯腳本
修改poco-1.4.6p2/bulid/config/MinGW,把「SYSLIBS = -L/usr/local/lib -L/usr/lib
-liphlpapi -lws2_32 -lssl -lcrypto -lws2_32 -lgdi32」里去掉「-lssl
-lcrypto」,因為我本機沒裝ssl,這個庫沒有,會影響編譯安裝;
5.make編譯
執行了上面的./configure
--config=......的命令後會生成一個config.make文件,然後輸入「make」並回車,就開始編譯安裝poco了,poco編譯過程會有一些提示錯誤,例如「poco-1.4.6p2/.../xxx.exe.exe:No
such file」,如果是的話就不用管他,繼續輸入make回車,他會繼續往下編譯,大概經過N次這樣的操作後,提示「make[1]:Nothing to be
done for 'all'.」的時候就編譯完了。
編譯完成後,在poco-1.4.6p2/lib/MinGW/ia32/目錄下就是編譯出來的靜態度和動態庫了。
⑼ C++ POCO庫中文編程參考指南(11) 如何使用Reactor框架
1 Reactor 框架概述POCO 中的 Reactor 框架是基於 Reactor 設計模式進行設計的。其中由 Handler 將某 Socket 產生的事件,發送到指定的對象的方法上,作為回調。2 光說不練假把式PoechantReactorServer 類,基本與 PoechantTCPServer: class PoechantReactorServer: public ServerApplication { public: PoechantServer() {} //: _helpRequested(false) {} ~PoechantServer() {} protected: void initialize(Application& self) { loadConfiguration(); ServerApplication::initialize(self); } void uninitialize() { ServerApplication::uninitialize(); } int main(const std::vector& args) { // … return Application::EXIT_OK; } }PoechantServiceHandler 類定義如下。 class PoechantServiceHandler { public: PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor); ~PoechantServiceHandler(); void onReadable(const AutoPtr& pNf); void onShutdown(const AutoPtr& pNf); private: enum { BUFFER_SIZE = 1024 }; StreamSocket _socket; SocketReactor& _reactor; char *_pBuffer; };PoechantServiceHandler 實現: PoechantServiceHandler::PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor) :_socket(socket), _reactor(reactor), _pBuffer(new char[BUFFER_SIZE]) { Application& app = Application::instance(); app.logger().information("Connection from" + socket.peerAddress().toString()); _reactor.addEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onReadable)); _reactor.addEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onShutdown)); } ~PoechantServiceHandler() { Application& app = Application::instance(); app.logger().information("Disconnecting " + _socket.peerAddress().toString()); _reactor.removeEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onReadable)); _reactor.removeEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onShutdown)); delete [] _pBuffer; } void onReadable(const AutoPtr& pNf) { // Receive data from StreamSocket int n = _socket.receiveBytes(_pBuffer, BUFFER_SIZE); // Send data back the client if (n > 0) _socket.sendBytes(_pBuffer, n); else delete this; } // When ShutdownNotification is detected, this method will be invoked. void onShutdown(const AutoPtr& pNf) { delete this; }啟動: int main(const std::vector& args) { unsigned short port = (unsigned short) config().getInt("PoechantReactor.port", 12345); ServerSocket serverSocket(port); SocketReactor reactor; SocketAcceptor acceptor(serverSocket, reactor); reactor.run(); waitForTerminationRequest(); reactor.stop(); return Application::EXIT_OK; } int main(int argc, char **argv) { return PoechantServer().run(argc, argv); }3 Clinet 測試代碼同《POCO庫中文編程參考指南(10)如何使用TCPServer框架?
⑽ 如何編譯POCO
按需求修改完buildwin.cmd文件後,使用vs2010的Tools中「Visual Studio x64 Win64 命令提示(2010)」命令,進入命令行狀態。轉到Poco所在的根目錄,直接輸入命令:
buildwin 100 build all both x64 samples
最後需要注意的地方:
上述方法完成編譯後,關於Data的MySQL、ODBC、SQLite三個庫沒有生成(原因不詳),需要單獨編譯,在此以MySQL為例記錄一下編譯過程。在\Data\MySQL文件夾下,找到MySQL_vs100.sln文件,打開。
打開的工程是win32的,需要改為X64。在C++包含目錄中添加本項目的include文件夾,例如:「C:\poco-1.5.1-all\Data\MySQL\include;」,還要添加安裝的MySQL的include文件夾,例如「C:\Program Files\MySQL\MySQL Server 5.6\include」,在庫目錄中添加所需庫的路徑,例如「C:\Program Files\MySQL\MySQL Server 5.6\lib」。
注意:編譯MySQL的Poco庫,必須先安裝MySQL。
設置好環境之後,就可以選擇相應的配置(debug or release)進行編譯。
編譯完成後,生成的庫在Poco根目錄下的lib文件夾,如果是編譯的動態庫,則動態庫在Poco根目錄下的bin文件夾。