Visual Studio 6.0編譯PWLib1.12總結

來源:互聯網
上載者:User
Visual Studio 6.0編譯PWLib總結1. 我的環境
Visual Studio 6.0Visual Studio.NET 2010Microsoft Platform SDK for Windows Server 2003 R2Microsoft SDKsMicrosoft DirectX 9.0 SDKMinGW

2. 注意

嘗試編譯前,請務必閱讀 http://www.cnblogs.com/yedaoq/archive/2011/02/22/1960866.html 。本文只涉及部分我在我的編譯環境中遇到的,並且官方編譯說明中沒有包含的問題。

3. 項目變動、編譯順序

在官方文檔中,提到的編譯順序為:Console、Console Components、PWLib。但在目前最新版本(1.12)的PWLib中,已經不再包含Console Components項目。官方解釋是為了簡化Windows下庫檔案的管理,並與Unix保持一致。Console Components的所有源檔案都添加到Console工程中了。

 

據我觀察,installdir\PWLib\src\ptclib中的檔案應該就是原Console Components工程的內容,而installdir\PWLib\src\ptlib則是原Console工程的內容。理由是:根據官方文檔,Console Components是一個包含額外的PWLib特性的工程,這些特性依賴於特定的其它庫和SDK。由於我的機器上存在Platform SDK、DirectX SDK,這些SDK包含了對Direct Sound、IPv6等的支援,在Console的編譯過程中,需要手動將installdir\PWLib\src\ptclib中的部分檔案添加到Console工程中。這部分檔案的功能在我看來符合“特性”的定義。因而我推測原Console Components的檔案被放置在installdir\PWLib\src\ptclib目錄中。當然,這隻是猜測而已。

 

新版本的PWLib的編譯順序為Console、MergeSym、PWLib,MergeSym是一個新工程。官方FAQ中有關於此工程的一些陳述:PWLib和OpenH323試圖在各個版本間保持DLL進入點的序號的一致性,MergeSym程式會比較DLL中的函數簽名與.dtf檔案中列出的進入點,並確保最終的檔案以相容的序號結束。

3. Include、Lib目錄順序

PWLib包含對_CrtReportBlockType的調用,其所在標頭檔為crtdbg.h。但是VC6帶的crtdbg.h不包含該函數,而Platform SDK帶的crtdbg.h中包含。因而platform SDK目錄應在VC6目錄之前。

另外,PWLib內建了Wince和WM平台的一些標頭檔。在之前的編譯過程中,這些標頭檔有影響。因此,建議將PWLib目錄置於Include目錄的偏後位置。另外,我覺得也可嘗試移除這些標頭檔,它們在installdir\PWLib\include\ptlib\wince和installdir\PWLib\include\ptlib\wm中。

4. Console編譯問題

錯誤內容:

Microsoft Platform SDK for Windows Server 2003 R2 \sdk\include\wspiapi.h(47) : error C2265: '' : reference to a zero-sized array is illegal

解決辦法:

wspiapi.h標頭檔頭部添加語句:#define _WSPIAPI_COUNTOF

 

錯誤內容:

fatal error C1083: Cannot open source file: '.\podbc.cxx': No such file or directory

解決辦法:

該檔案位置不對,實際位置在installdir\PWLib\src\ptclib中。

 

錯誤內容:

G:\Open Source\ptlib\src\ptlib\common\videoio.cxx(567) : error C2059: syntax error : '}' G:\Open Source\ptlib\src\ptlib\common\videoio.cxx(568) : error C2143: syntax error : missing ';' before '}' 

解決辦法:

sizeTable表的最後一個子結構中沒有定義內容(即使用成員預設值)。但在VC上無法編譯通過,其寫法應改為:{ NULL, 0, 0 }。

5. MergeSym編譯問題

MergeSym編譯過程中,一般會出現連結問題。有兩個解決方向:

 

首先,刪除.dtf檔案。之前說過,MergeSym會用.dtf檔案來保持DLL入口序號的相容性。預設的dtf檔案包含啟用了所有特性時的進入點列表,即最全的列表。如果實際上沒有啟用某些特性,則MergeSym的對比過程會失敗。官方建議刪除所有的.dtf檔案。這些檔案在installdir\PWLib\include\ptlib\msos中。

 

其次,當啟用了某些特性時,需要手動向Console工程中添加額外的檔案,否則會在編譯MergeSym時出連結錯誤。Console編譯過程中,configure程式會掃描所有硬碟,尋找其中的程式庫,基於此確定啟用哪些特性。以下為安裝了platform SDK和VC6時的特性載入情況:

 

Located DNS Resolver at f:\program files\microsoft platform sdk for windows server 2003 r2\Located IPv6 Support at f:\program files\microsoft platform sdk for windows server 2003 r2\include\Located QoS Support at f:\program files\microsoft platform sdk for windows server 2003 r2\include\Located ODBC support at f:\program files\microsoft platform sdk for windows server 2003 r2\include\Located Direct Sound Support at f:\program files\microsoft visual studio\vc98\Features:                          Version enabled                       Byte Order enabled                Semaphore Support enabled                   Plugin Support enabled                     DNS Resolver enabled                       Cyrus SASL DISABLED                        Open LDAP DISABLED due to absence of feature sasl                         Open SSL DISABLED                     Open SSL AES DISABLED due to absence of feature openssl                 Windows Open SSL DISABLED             Windows Open SSL AES DISABLED due to absence of feature winssl                        Expat XML DISABLED                Windows Expat XML DISABLED                             VXML DISABLED due to absence of feature expat|winexpat                           Jabber DISABLED due to absence of feature expat|winexpat                           XMLRPC DISABLED due to absence of feature expat|winexpat                             SOAP DISABLED due to absence of feature expat|winexpat                       Speech API DISABLED                     IPv6 Support enabled                      QoS Support enabled         Simple DirectMedia Layer DISABLED                    Video Support enabled                      ASN Support enabled                     STUN Support enabled             pipe channel Support enabled   DTMF encoding/decoding support enabled                 WAV file support enabled           SOCKS protocol support enabled             FTP protocol support enabled            SNMP protocol support enabled          Telnet protocol support enabled        remote connection support enabled                   Serial Support enabled                POP3/SMTP Support enabled                     HTTP Support enabled             HTTP service Support enabled     Config file protocol support enabled       Socket aggregation support enabled               Video file support enabled                    Sound support enabled             Direct Sound Support enabled                     ODBC support enabled

 

若啟用了這些特性,則需要向Console工程添加至少下列檔案:installdir\PWLib\src\ptclib目錄中的delaychan.cxx、http.cxx、pvfiledev.cxx、pvidfile.cxx、pwavfile.cxx、pwavfiledev.cxx,以及installdir\PWLib\src\ptlib\common中的pglobalstatic.cxx。

若要阻止Configure掃描某些位置以免啟用某些特性,可以編輯環境變數:MSVC_PWLIB_CONFIGURE_EXCLUDE_DIRS或PWLIB_CONFIGURE_EXCLUDE_DIRS等。

 

6. PWLib編譯問題

錯誤內容:

Microsoft Visual Studio\VC98\INCLUDE\d3dtypes.h(14) : fatal error C1083: Cannot open include file: 'subwtype.h': No such file or directory

解決辦法:

添加WIN32宏的定義,可添加到dllmain.cxx中。如:#define WIN32 1

 

錯誤內容:

LINK : fatal error LNK1181: cannot open input file "ptclib.lib"

解決辦法:

之前提到Console Components項目合并到Console中了,因而PWLib項目也不再需要依賴ptclib.lib(Console Components的輸出)。開啟PWLib項目屬性框->Link頁->Object/Library Modules,將其中的ptclib.lib去掉即可。

 

錯誤內容:

fatal error LNK1202: "ptlib.pdb" is missing debugging information for referencing module

解決辦法:

將installdir\PWLib\Lib檔案夾刪除,所有工程重新編譯。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.