2008年9月27日 星期六

[C++] 用 cygwin 編譯多媒體串流程式庫 live555

Live555 串流程式庫不僅可以讓你用 Visual Studio .Net 編譯成 Windows 的 dll, 它還提供了 cygwin 平台的編譯方式. 然而在 Windows 下直接使用 Visual Studio 編譯就好了, 為何還要會 cygwin 的方法呢?

主要的原因是由於很多三方跨平台專案都可以用 cygwin 編譯成 Windows 的執行檔. 這意味著如果一個多媒體專案使用了 live555 的程式庫, 那麼在 cygwin 下所需要的 library 是 .a 不是 .lib. 最明顯的例子就是 vlc 或 mplayer 專案.

為了這個原因, 我需要知道如何在 cygwin 環境下成功的編譯出 live555.
出乎意料之外的成功, 幾乎沒有像在 Visual Studio 編譯情況下的複雜.

好了, 上菜嘍.

安裝 cygwin

Step 1: 下載 http://www.cygwin.com

Step 2: 執行 Setup.exe

Installation type : Install from Internet (default)

Root directory : C:\cygwin (default)

Local Package directory : C:\Downloads\cygwin

Internet Connection : Direct Connection

Download Site : 選 FTP 比較快

Step 3: 大致選擇安裝套件:

Archive, Devel, Editor, Libs, Web

Step 4: 建立你的 home 目錄

點選桌面上的 cygwin 捷徑.

開始編譯 live 555

Step 1: 下載 live555 最新 source code

http://www.live555.com/liveMedia/

Step 2: 在 Windows 先解開 source code 壓縮檔, 放在剛剛建立的目錄中.

ex: 我的 home 目錄是 Jing, 所以我解在

C:\cygwin\home\Jing\live

Step 3: 點選桌面上的 cygwin 捷徑, 進入 cygwin 模式

Step 4: 製作 Makefile
指令: ./genMakefiles cygwin

Step 5: 修正錯誤的 Makefile
將 live/groupsock/Makefile 第一行
INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM" 最後的雙引號刪除
變成
INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM

否則會出現 GroupsockHelper.cpp unexpected EOF while looking `"' 的錯誤訊息.

Step 6: 下達 make 執行真正的編譯工作

Step 7: 完成

Enjoy.

by Jing

延伸閱讀

[1] [C++] 用 VC2005 編譯多媒體串流程式庫 live555

7 則留言:

  1. 井兄您好:
    我照著您文章中的步驟做編譯,在Step 5: 修正錯誤的 Makefile後就完成編譯的過程了嗎?是否須要執行make之類的指令。如果不須要,那編譯過後的執行檔會在那裡呢?

    回覆刪除
  2. 要下 make 指令, 才能正確地執行 Makefile 指令.

    回覆刪除
  3. 井兄您好:
    想請問一下make指令要下在那裡呢?我試過好幾個位置都不行,或者是我下錯指令,是否可以請井兄詳細的說明,謝謝。

    回覆刪除
  4. 井名大您好:

    小弟最近在做有關多媒體廣播的研究,想利用live555這個函式庫來做串流。照個井兄您的步驟已順利用vs2005編譯初執行檔了。無奈小弟寫code的能力太差,因此想問您幾個問題!!希望沒造成您的困擾

    1.您在文章最後提到的"測驗與驗證"部分該如何實現呢?是寫一程式呼叫此執行檔並且下參數嗎?可否簡略的講解該如何使用呢?

    2.我想寫一個C#的視窗程式呼叫外部的API,就是VLC來使用,並且從程式中對vlc下參數執行它,想請問我該如何寫才有辦法對VLC下參數呢?我目前只能在執行視窗程式時將vlc打開,無法對它下參數。

    謝謝....

    回覆刪除
  5. 如果井大不方便在網誌上解答我問題
    我想我留個emil好了
    svmax140@yahoo.com.tw
    感謝您....

    回覆刪除
  6. 我想你可能誤會我的意思了, 我指的是當你可以完成編譯而且可以正常執行時, 那你應該有能力把他變成一個 dll 或 library, 讓你的自己的程式呼叫, 形成自己專屬的 rtsp server.

    呼叫任意程式並給與參數的方法, 是這樣的問題嗎?
    如果是這樣的話, CreateProcess 這個 API 應該沒問題.

    回覆刪除
  7. 您好:
    這陣子在編譯cygwin的VLC,其中有用到live555內的liveMedia;想請問您是否有live555的2008.12.19(1229644800)版本呢?因為我想置換裡面的函式庫。

    我的聯絡email是matt72228@gmail.com,還煩請多多勞心呢,感謝:)

    回覆刪除