linux下编译jrtplib-3.9.1

网友投稿 741 2022-09-27

linux下编译jrtplib-3.9.1

linux下编译jrtplib-3.9.1

一、-jrtplib、jthread、CMake

jrtplib:​​find -lIN​

二、编译

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 "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,如下所示,注意添加和修改的部分。

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 ")jrtplib_include_test(sys/sockio.h RTP_HAVE_SYS_SOCKIO "// Don't have ")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 \n#include \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 \n#include ")else (JRTPLIB_STDINT) check_cxx_source_compiles("#include \n#include \nint main(void) { uint32_t x = 0; uint32_t y = x; return 0; }" JRTPLIB_INTTYPES) if (JRTPLIB_INTTYPES) set(RTP_INTTYPE_HEADERS "#include \n#include \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 \n #include \n#ifndef _WIN32_WCE\n #include \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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《HelloGitHub》第 75 期
下一篇:LevelDB源码分析之五:skiplist(1)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~