生活随笔
收集整理的這篇文章主要介紹了
linux下编译jrtplib-3.9.1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網站:http://blog.csdn.net/caoshangpa/article/details/51416822
一、下載jrtplib、jthread、CMake
jrtplib:http://research.edm.uhasselt.be/jori/jrtplib/jrtplib-3.9.1.zip
jthread:http://research.edm.uhasselt.be/jori/jthread/jthread-1.3.1.zip
CMake:https://cmake.org/download/,最新版已經到3.5.1,我用的是3.4.0
注意,如果jrtplib編譯過程中報錯/usr/bin/ld:cannot find -lIN,參考:http://blog.csdn.NET/caoshangpa/article/details/51416500
二、編譯
1.jthread編譯
修改CMakeLists.txt,如下所示,注意添加的部分。
[cpp]?view plaincopy
cmake_minimum_required(VERSION?2.6)?? ?? project(jthread)?? set(VERSION?1.3.1)?? #************************************添加開始******************************?? #告知當前使用的是交叉編譯方式???? SET(CMAKE_SYSTEM_NAME?Linux)???? #設置c編譯器???? SET(CMAKE_C_COMPILER?"gcc")???? #設置c++編譯器???? SET(CMAKE_CXX_COMPILER?"g++")?? #設置安裝路徑?? set(CMAKE_INSTALL_PREFIX?"/usr/local/jrtplibRedHat")?? #************************************添加結束******************************?? set(CMAKE_MODULE_PATH?${CMAKE_MODULE_PATH}?"${PROJECT_SOURCE_DIR}/cmake")?? set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib)?? if?(EXISTS?"${CMAKE_INSTALL_PREFIX}/lib32/"?AND?CMAKE_SIZEOF_VOID_P?EQUAL?4)?? ????set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib32)?? elseif?(EXISTS?"${CMAKE_INSTALL_PREFIX}/lib64/"?AND?CMAKE_SIZEOF_VOID_P?EQUAL?8)?? ????set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib64)?? endif?()?? ?? set(LIBRARY_INSTALL_DIR?"${_DEFAULT_LIBRARY_INSTALL_DIR}"?CACHE?PATH?"Library?installation?directory")?? if(NOT?IS_ABSOLUTE?"${LIBRARY_INSTALL_DIR}")?? ????set(LIBRARY_INSTALL_DIR?"${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR}")?? endif()?? ?? find_package(Threads)?? if?(NOT?CMAKE_USE_WIN32_THREADS_INIT)?? ????if?(NOT?CMAKE_USE_PTHREADS_INIT)?? ????????message(FATAL_ERROR?"Can?find?neither?pthread?support?nor?Win32?thread?support")?? ????endif?(NOT?CMAKE_USE_PTHREADS_INIT)?? endif?(NOT?CMAKE_USE_WIN32_THREADS_INIT)?? ?? add_subdirectory(src)??
cmake CMakeLists.txt
make
make install
2.jrtplib編譯
修改CMakeLists.txt,如下所示,注意添加和修改的部分。
[cpp]?view plaincopy
cmake_minimum_required(VERSION?2.6)?? ?? project(jrtplib)?? set(VERSION?3.9.1)?? #************************************添加開始******************************?? #告知當前使用的是交叉編譯方式???? SET(CMAKE_SYSTEM_NAME?Linux)???? #設置c編譯器???? SET(CMAKE_C_COMPILER?"gcc")???? #設置c++編譯器???? SET(CMAKE_CXX_COMPILER?"g++")?? #設置安裝路徑?? set(CMAKE_INSTALL_PREFIX?"/usr/local/jrtplibRedHat")?? #************************************添加結束******************************?? set(CMAKE_MODULE_PATH?${CMAKE_MODULE_PATH}?"${PROJECT_SOURCE_DIR}/cmake")?? ?? set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib)?? if?(EXISTS?"${CMAKE_INSTALL_PREFIX}/lib32/"?AND?CMAKE_SIZEOF_VOID_P?EQUAL?4)?? ????set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib32)?? elseif?(EXISTS?"${CMAKE_INSTALL_PREFIX}/lib64/"?AND?CMAKE_SIZEOF_VOID_P?EQUAL?8)?? ????set?(_DEFAULT_LIBRARY_INSTALL_DIR?lib64)?? endif?()?? ?? set(LIBRARY_INSTALL_DIR?"${_DEFAULT_LIBRARY_INSTALL_DIR}"?CACHE?PATH?"Library?installation?directory")?? if(NOT?IS_ABSOLUTE?"${LIBRARY_INSTALL_DIR}")?? ????set(LIBRARY_INSTALL_DIR?"${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR}")?? endif()?? ?? include(CheckCXXCompilerFlag)?? include(CheckIncludeFile)?? include(CheckIncludeFileCXX)?? include(CheckCXXSourceCompiles)?? include(TestBigEndian)?? include(${PROJECT_SOURCE_DIR}/cmake/Macros.cmake)?? ?? find_package(JThread)?? ?? set(JRTPLIB_LINK_LIBS?"")?? #************************************修改開始******************************?? set(JRTPLIB_INTERNAL_INCLUDES?"/usr/local/jrtplibRedHat/include")?? set(JRTPLIB_EXTERNAL_INCLUDES?"/usr/local/jrtplibRedHat/include")?? #************************************修改結束******************************?? add_additional_stuff(JRTPLIB_EXTERNAL_INCLUDES?JRTPLIB_LINK_LIBS)?? ?? jrtplib_support_option("Support?SDES?PRIV?items"?JRTPLIB_SUPPORT_SDESPRIV?RTP_SUPPORT_SDESPRIV?ON?"//?No?support?for?SDES?PRIV?items")?? jrtplib_support_option("Support?the?probation?mechanism?for?a?new?source"?JRTPLIB_SUPPORT_PROBATION?RTP_SUPPORT_PROBATION?ON?"//?Do?not?wait?for?a?number?of?consecutive?packets?to?validate?source")?? jrtplib_support_option("Support?sending?RTCP?APP?packets"?JRTPLIB_SUPPORT_SENDAPP?RTP_SUPPORT_SENDAPP?ON?"//?No?direct?support?for?sending?RTCP?APP?packets")?? jrtplib_support_option("Support?sending?unknown?RTCP?packets"?JRTPLIB_SUPPORT_RTCPUNKNOWN?RTP_SUPPORT_RTCPUNKNOWN?OFF?"//?No?support?for?sending?unknown?RTCP?packets")?? jrtplib_support_option("Support?memory?management?mechanism"?JRTPLIB_SUPPORT_MEMORYMGMT?RTP_SUPPORT_MEMORYMANAGEMENT?ON?"//?No?memory?management?support")?? ?? jrtplib_include_test(sys/filio.h?RTP_HAVE_SYS_FILIO?"//?Don't?have?<sys/filio.h>")?? jrtplib_include_test(sys/sockio.h?RTP_HAVE_SYS_SOCKIO?"//?Don't?have?<sys/sockio.h>")?? jrtplib_include_test(ifaddrs.h?RTP_SUPPORT_IFADDRS?"//?No?ifaddrs?support")?? ?? if?(JTHREAD_FOUND)?? ????set(V?"ON")?? else?(JTHREAD_FOUND)?? ????set(V?"OFF")?? endif?(JTHREAD_FOUND)?? ?? option(JTHREAD_ENABLED?"Thread?support"?${V})?? if?(JTHREAD_ENABLED)?? ????set?(RTP_SUPPORT_THREAD?"#define?RTP_SUPPORT_THREAD")?? ????if?(JTHREAD_FOUND)?? ????????save_paths(JRTPLIB_EXTERNAL_INCLUDES?"${JTHREAD_INCLUDE_DIRS}")?? ????????save_paths(JRTPLIB_LINK_LIBS?"${JTHREAD_LIBRARIES}")?? ????endif(JTHREAD_FOUND)?? else?(JTHREAD_ENABLED)?? ????set?(RTP_SUPPORT_THREAD?"//?No?support?for?JThread?was?enabled")?? endif?(JTHREAD_ENABLED)?? ?? if?(CMAKE_CROSSCOMPILING)?? ????option?(JRTPLIB_USE_BIGENDIAN?"Target?platform?is?big?endian"?ON)?? ????if?(JRTPLIB_USE_BIGENDIAN)?? ????????set(RTP_ENDIAN?"#define?RTP_BIG_ENDIAN")?? ????else?(JRTPLIB_USE_BIGENDIAN)?? ????????set(RTP_ENDIAN?"//?Little?endian?system")?? ????endif?(JRTPLIB_USE_BIGENDIAN)?? else?(CMAKE_CROSSCOMPILING)?? ????test_big_endian(JRTPLIB_BIGENDIAN)?? ????if?(JRTPLIB_BIGENDIAN)?? ????????set(RTP_ENDIAN?"#define?RTP_BIG_ENDIAN")?? ????else?(JRTPLIB_BIGENDIAN)?? ????????set(RTP_ENDIAN?"//?Little?endian?system")?? ????endif?(JRTPLIB_BIGENDIAN)?? endif?(CMAKE_CROSSCOMPILING)?? ?? jrtplib_test_feature(socklentest?RTP_SOCKLENTYPE_UINT?TRUE?"//?socklen_t?is?'int'")?? jrtplib_test_feature(ipv4mcasttest?RTP_SUPPORT_IPV4MULTICAST?FALSE?"//?No?IPv4?multicasting?support")?? jrtplib_test_feature(salentest?RTP_HAVE_SOCKADDR_LEN?FALSE?"//?No?sa_len?member?in?struct?sockaddr")?? jrtplib_test_feature(getloginrtest?RTP_SUPPORT_GETLOGINR?FALSE?"//?Not?using?getlogin_r")?? jrtplib_test_feature(ipv6test?RTP_SUPPORT_IPV6?FALSE?"//?No?IPv6?support")?? jrtplib_test_feature(ipv6mcasttest?RTP_SUPPORT_IPV6MULTICAST?FALSE?"//?No?IPv6?multicasting?support")?? ?? check_cxx_source_compiles("#include?<stdint.h>\n#include?<sys/types.h>\nint?main(void)?{?size_t?a?=?0?;?size_t?b?=?a;?uint32_t?x?=?0;?uint32_t?y?=?x;?return?0;?}"?JRTPLIB_STDINT)?? if?(JRTPLIB_STDINT)?? ????set(RTP_INTTYPE_HEADERS?"#include?<stdint.h>\n#include?<sys/types.h>")?? else?(JRTPLIB_STDINT)?? ????check_cxx_source_compiles("#include?<inttypes.h>\n#include?<sys/types.h>\nint?main(void)?{?uint32_t?x?=?0;?uint32_t?y?=?x;?return?0;?}"?JRTPLIB_INTTYPES)?? ????if?(JRTPLIB_INTTYPES)?? ????????set(RTP_INTTYPE_HEADERS?"#include?<inttypes.h>\n#include?<sys/types.h>\n")?? ????else?(JRTPLIB_INTTYPES)?? ????????if?(NOT?UNIX?AND?WIN32)?? ????????????set(RTP_INTTYPE_HEADERS?"#include?\"rtptypes_win.h\"")?? ????????else?(NOT?UNIX?AND?WIN32)?? ????????????set(RTP_INTTYPE_HEADERS?"#error?Could?not?find?header?files?that?define?types?like?'uint32_t'.?Please?edit?the?file?${PROJECT_BINARY_DIR}/src/rtptypes_unix.h?and?make?sure?that?the?following?types?are?defined:?int8_t,?uint8_t,?int16_t,?uint16_t,?int32_t,?uint32_t,?int64_t,?uint64_t")?? ????????????message("\n\nError:?Could?not?find?header?files?that?define?types?like?'uint32_t'.\nPlease?edit?the?file?${PROJECT_BINARY_DIR}/src/rtptypes_unix.h\nand?make?sure?that?the?following?types?are?defined:?\nint8_t,?uint8_t,?int16_t,?uint16_t,?int32_t,?uint32_t,?int64_t,?uint64_t\n\n")?? ????????endif?(NOT?UNIX?AND?WIN32)?? ????endif?(JRTPLIB_INTTYPES)?? endif?(JRTPLIB_STDINT)?? ?? if?(NOT?UNIX?AND?WIN32)?? ????set(RTP_WINSOCK_HEADERS?"#if?defined(WIN32)?||?defined(_WIN32_WCE)\n????#include?<winsock2.h>?\n??#include?<ws2tcpip.h>\n#ifndef?_WIN32_WCE\n???#include?<sys/types.h>\n#endif?//?_WIN32_WCE\n#endif?//?WIN32?||?_WIN32_WCE\n")?? endif?(NOT?UNIX?AND?WIN32)?? ?? if?(NOT?UNIX)?? ????set(JRTPLIB_COMPILE_STATIC?ON?CACHE?BOOL?"Flag?indicating?if?a?static?library?should?be?built,?or?a?dynamic?one")?? ????list(APPEND?JRTPLIB_LINK_LIBS?"ws2_32")?? endif?(NOT?UNIX)?? ?? if?(UNIX?OR?JRTPLIB_COMPILE_STATIC)?? ????set(JRTPLIB_IMPORT?"")?? ????set(JRTPLIB_EXPORT?"")?? else?(UNIX?OR?JRTPLIB_COMPILE_STATIC)?? ????set(JRTPLIB_IMPORT?"__declspec(dllimport)")?? ????set(JRTPLIB_EXPORT?"__declspec(dllexport)")?? endif?(UNIX?OR?JRTPLIB_COMPILE_STATIC)?? ?? configure_file("${PROJECT_SOURCE_DIR}/src/rtptypes.h.in"?"${PROJECT_BINARY_DIR}/src/rtptypes.h")?? configure_file("${PROJECT_SOURCE_DIR}/src/rtpconfig.h.in"?"${PROJECT_BINARY_DIR}/src/rtpconfig.h")?? ?? save_paths(JRTPLIB_INTERNAL_INCLUDES?"${PROJECT_SOURCE_DIR}/src"?"${PROJECT_BINARY_DIR}/src")?? ?? add_subdirectory(src)?? ?? ??? if?(UNIX)?? ????get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME?jrtplib-shared?LOCATION)?? ????get_filename_component(JRTPLIB_LIBNAME?"${JRTPLIB_LOCAL_LIBRARY_NAME}"?NAME)?? ????set(JRTPLIB_LIBS?"${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME}")?? else?(UNIX)?? ????if?(JRTPLIB_COMPILE_STATIC)?? ????????get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME?jrtplib-static?RELEASE_LOCATION)?? ????????get_filename_component(JRTPLIB_LIBNAME_RELEASE?"${JRTPLIB_LOCAL_LIBRARY_NAME}"?NAME_WE)?? ????????get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME?jrtplib-static?DEBUG_LOCATION)?? ????????get_filename_component(JRTPLIB_LIBNAME_DEBUG?"${JRTPLIB_LOCAL_LIBRARY_NAME}"?NAME_WE)?? ????else?(JRTPLIB_COMPILE_STATIC)?? ????????get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME?jrtplib-shared?RELEASE_LOCATION)?? ????????get_filename_component(JRTPLIB_LIBNAME_RELEASE?"${JRTPLIB_LOCAL_LIBRARY_NAME}"?NAME_WE)?? ????????get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME?jrtplib-shared?DEBUG_LOCATION)?? ????????get_filename_component(JRTPLIB_LIBNAME_DEBUG?"${JRTPLIB_LOCAL_LIBRARY_NAME}"?NAME_WE)?? ????endif?(JRTPLIB_COMPILE_STATIC)?? ????set(JRTPLIB_LIBS?optimized?"${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME_RELEASE}.lib"??? ?????????????????debug?"${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME_DEBUG}.lib")?? endif?(UNIX)?? ?? set(JRTPLIB_INCDIRS?${JRTPLIB_EXTERNAL_INCLUDES}?${CMAKE_INSTALL_PREFIX}/include)?? set(JRTPLIB_LIBS?${JRTPLIB_LIBS}?${JRTPLIB_LINK_LIBS})?? remove_empty(JRTPLIB_INCDIRS)?? list(REMOVE_DUPLICATES?JRTPLIB_INCDIRS)?? remove_empty(JRTPLIB_LIBS)?? ?? foreach(ARG?${JRTPLIB_LIBS})?? ????set(JRTPLIB_LIBS_CMAKECONFIG?"${JRTPLIB_LIBS_CMAKECONFIG}?\"${ARG}\"")?? endforeach()?? foreach(ARG?${JRTPLIB_INCDIRS})?? ????set(JRTPLIB_INCDIRS_CMAKECONFIG?"${JRTPLIB_INCDIRS_CMAKECONFIG}?\"${ARG}\"")?? endforeach()?? ?? configure_file("${PROJECT_SOURCE_DIR}/cmake/JRTPLIBConfig.cmake.in"?"${PROJECT_BINARY_DIR}/cmake/JRTPLIBConfig.cmake")?? install(FILES?"${PROJECT_BINARY_DIR}/cmake/JRTPLIBConfig.cmake"?DESTINATION?${LIBRARY_INSTALL_DIR}/cmake/JRTPLIB)?? ?? if?(UNIX)?? ????foreach(ARG?${JRTPLIB_LIBS})?? ????????set(JRTPLIB_LIBS_PKGCONFIG?"${JRTPLIB_LIBS_PKGCONFIG}?${ARG}")?? ????endforeach()?? ????foreach(ARG?${JRTPLIB_INCDIRS})?? ????????set(JRTPLIB_INCDIRS_PKGCONFIG?"${JRTPLIB_INCDIRS_PKGCONFIG}?-I${ARG}")?? ????endforeach()?? ?? ????configure_file(${PROJECT_SOURCE_DIR}/pkgconfig/jrtplib.pc.in?${PROJECT_BINARY_DIR}/pkgconfig/jrtplib.pc)?? ????install(FILES?${PROJECT_BINARY_DIR}/pkgconfig/jrtplib.pc?DESTINATION?${LIBRARY_INSTALL_DIR}/pkgconfig)?? endif?(UNIX)??
cmake CMakeLists.txt
make
make install
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的linux下编译jrtplib-3.9.1的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。