一、下载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,如下所示,注意添加的部分。

cmake_minimum_required(VERSION 2.6)project(jthread)
set(VERSION 1.3.1)
#************************************添加开始******************************
#告知当前使用的是交叉编译方式
SET(CMAKE_SYSTEM_NAME Linux)
#设置c编译器
SET(CMAKE_C_COMPILER "arm-arago-linux-gnueabi-gcc")
#设置c++编译器
SET(CMAKE_CXX_COMPILER "arm-arago-linux-gnueabi-g++")
#设置安装路径
set(CMAKE_INSTALL_PREFIX "/usr/local/jrtplibDM3730")
#************************************添加结束******************************
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,如下所示,注意添加和修改的部分。

cmake_minimum_required(VERSION 2.6)project(jrtplib)
set(VERSION 3.9.1)
#************************************添加开始******************************
#告知当前使用的是交叉编译方式
SET(CMAKE_SYSTEM_NAME Linux)
#设置c编译器
SET(CMAKE_C_COMPILER "arm-arago-linux-gnueabi-gcc")
#设置c++编译器
SET(CMAKE_CXX_COMPILER "arm-arago-linux-gnueabi-g++")
#设置安装路径
set(CMAKE_INSTALL_PREFIX "/usr/local/jrtplibDM3730")
#************************************添加结束******************************
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/jrtplibDM3730/include")
set(JRTPLIB_EXTERNAL_INCLUDES "/usr/local/jrtplibDM3730/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参考:http://blog.csdn.net/caoshangpa/article/details/51416822

windows下编译jrtplib参考:http://blog.csdn.net/caoshangpa/article/details/51152541

原创不易,转载请标明出处:https://blog.csdn.net/caoshangpa/article/details/51416997

linux下交叉编译jrtplib-3.9.1相关推荐

  1. linux 下基于jrtplib库的实时传送实现

    linux 下基于jrtplib库的实时传送实现 一.RTP 是进行实时流媒体传输的标准协议和关键技术 实时传输协议(Real-time Transport Protocol,PRT)是在 Inter ...

  2. linux下基于jrtplib库的实时传送实现

    linux 下基于jrtplib库的实时传送实现 一.RTP 是进行实时流媒体传输的标准协议和关键技术  实时传输协议(Real-time Transport Protocol,PRT)是在 Inte ...

  3. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  4. Linux下使用JRTPLIB进行实时流媒体编程

    收藏于 2013-04-22 迁移自本人的百度空间 -------------------------------- 转载自 http://blog.csdn.net/dongliqiang2006/ ...

  5. linux下交叉编译libusb的方法及编译一个使用了libusb库的test程序的方法

    linux交叉编译libusb的方法 下载libusb 下载网址:libusb - Browse Files at SourceForge.net 交叉编译libusb 将下载好的libusb压缩包解 ...

  6. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  7. Linux下交叉编译gdb和gdbserver

    平台:tq2440 GCC:  gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) 这里过程中参考了下面两篇博文: http://blog.csdn.ne ...

  8. suse linux下交叉编译,阐述SUSE 10.1交叉编译环境构建方法

    现在很多的人都在应用SUSE,伴随着的问题也随之出现,我学习SUSE也有很长时间了,也有些小的心得体会.在这里和大家分享一下,今天所要说的是SUSE 10.1交叉编译环境构建问题.crosstool制 ...

  9. suse linux下交叉编译,SUSE 10.1下交叉编译环境构建

    作者: 下载或复制arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,这个软件配套的书中有,没有的和我联系copy给大家. 书中介绍的crosstool制作工具的链的方法很好,但是很 ...

最新文章

  1. 9大数据集6大度量指标完胜,周志华等提出深度森林处理多标签学习
  2. 树莓派如何卸载mysql_树莓派安装MySQL数据库与卸载
  3. 安装VMwareTools后虚拟机中的鼠标滚轮无法使用解决办法
  4. 工作单元php,php – 无法从工作单元测试用例构建最简单的套件
  5. [css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?
  6. 数据字典在sga的哪一个组件中缓存_非功能性约束之性能(1)-性能银弹:缓存...
  7. Cacti添加IO模板并监控磁盘IO
  8. 一套即时通讯聊天程序源码 VUE写的
  9. 百年后你怎么在墓碑上留言?
  10. 计算机应用软件安装教程,计算机应用与网基础教程 常用软件安装.ppt
  11. EclipseLink+H2 快速搭建JPA开发环境
  12. 结对编程--基于android平台的黄金点游戏(2.0版本)
  13. 《OpenGL超级宝典》第一章:3D图形和OpenGL简介
  14. 王者荣耀是用什么代码变成MOBA游戏的,该怎么学?有前途吗?
  15. javaweb实现pdf预览
  16. css样式之导航条(nav)
  17. oracle的PRIPID字段,oracle常用库表和常用导数逻辑.doc
  18. 获取鼠标图片和鼠标位置的方法
  19. vue使用echarts图表渲染异常本地正常,线上时有时无的渲染
  20. UCan技术开放日|告别转型“焦虑”,从云原生开始

热门文章

  1. MFC下ODBC方式连接数据库
  2. Spring容器中的Bean是否会被GC呢?
  3. 维吉尼亚密码破解(Python完整详细源码)
  4. 你离年薪50w的架构师还差多远
  5. textarea回车换行的方法
  6. java字符串反转reverse();
  7. 注册苹果开发者帐号 用什么银行的什么卡好? 收款帐号呢?
  8. 好友列表页面java_怎样制作QQ好友列表的界面?
  9. 【UML】UML基本概念
  10. 关于graphql快速入门