Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据格式。...一般来说,protobuf经常搭配Cmake使用,Cmake有官方的modules,可以通过简单的几个命令protobuf_generate_cpp来生成对应的.pb.cc和.pb.h。...(${CMAKE_CURRENT_BINARY_DIR}) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto) protobuf_generate_cpp...mediapipe中使用了大量的ProtoBuf技术来表示图结构,而且mediapipe原生并不是采用cmake来构建项目,而是使用google自家研发的bazel,这个项目构建系统我就不评价了,而现在我需要使用...正确修改cmake 对于这种情况,比较合适的做法是直接使用命令进行生成。
目录 写在前面 准备 使用 参考 完 写在前面 1、本文内容 在自己的程序中使用Eigen库,用cmake实现 2、平台 windows,linux 3、转载请注明出处: https://blog.csdn.net...title=Main_Page 以当前下载的cmake3.4为例,解压后的目录结构为source_code/eigen-3.4.0 通过cmake安装 cd source_code cmake.../build -DEigen3_DIR="D:/carlos/install/Eigen/share/eigen3/cmake" cmake --build ..../build --config Release --parallel 8 其中,-DEigen3_DIR就是指定Eigen安装路径下cmake的路径 参考 四元数、罗德里格斯公式、欧拉角、旋转矩阵推导和资料...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
protobuf源码下载 github上下载最新版本的protobuf源码zip包,并解压缩到本地 fetch_protobuf.sh #!...# 编译并安装protobuf到指定的文件夹 make install popd rm -fr build.gcc popd 上面的脚本中在调用cmake生成Makefile时定义了protobuf_BUILD_TESTS...=off,这是因为protobuf的CMakeLists.txt中默认定义protobuf_BUILD_TESTS=on, 而当protobuf_BUILD_TESTS=on时,需要gmock支持(...https://github.com/google/googlemock),否则cmake会报如下错误: CMake Error at tests.cmake:2 (message):...gmock是google公司推出的一款开源的白盒测试工具,对于我们一般的应用来说,不需要gmock提供的功能,所以这里可以将protobuf_BUILD_TESTS=off,避免麻烦。
但我们又不能直接提供源码,所以我们可以提供一个库文件(静态库或者动态库),配置接口文件可以在不提供源代码的情况下给他人提供算法模块功能。...(2)CMake 的使用环境和安装 本教程的使用环境为: ubutu18.04 lts gcc version 7.5.0 g++ version 7.5.0 cmake version 3.10.2...同时可以使用SET_TARGET_PROPERTIES函数可以设置库文件的版本。...PROPERTIES prop1 value1 prop2 value2 ...) add_library: 为生成的库添加源文件,是库的名字,直接写名字即可,不要写lib,会自动加上前缀。...... ...) (4)使用CMake进行编译 CMake在生成文件的过程中会生成很多中间缓存文件,为了使项目更简洁,文件路径更清楚,一般会在项目的root目录下建立一个文件夹,用于存储CMake
在前面一篇文章写了如何使用CMake编译“hello world”。这一篇写写构建静态库和动态库。...上一文章链接:《CMake,大型项目采用的构建工具》 对于静态库和动态库的了解,可以看看之前的文章: 静态库:《静态链接库的实现》 动态库:《动态链接库的实现》 在上一篇文章中,我们说了内部构建和外部构建的区别...rice.c) ADD_LIBRARY(rice STATIC ${LIBRICE_SRC}) 制作库的工程模板制作好后,进行编译,在build目录下进行编译,如下: $ cmake .....$ cd lib $ ls CMakeFiles cmake_install.cmake librice.a Makefile $ 编译完,在lib目录下生成了librice.a这个静态库。...EXCLUDE_FROM_ALL,参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手工构建。 根据ADD_LIBRARY指令的描述,在上面的例子中,很清楚的理解是生成静态库的操作。
第一步 设置CMakeLists.txt位置 // android {} 里增加 externalNativeBuild { cmake { path "src/main/cpp.../CMakeLists.txt" } } 第二步 设置CMakeLists.txt配置 cmake_minimum_required(VERSION 3.4.1) // a.cpp、b.cpp...编译成 MyLib.so 库 add_library(MyLib SHARED a.cpp b.cpp) # (可选)如果有需要则添加额外链接的目标文件 # 例如 a.cpp 引入 include..."android/log.h" # android、log 两个库是由安卓NDK提供的 target_link_libraries(MyLib android log) 第三步 点击 make project...按钮,进行工程构建 在 app\build\intermediates\cmake\debug\obj 生成对应平台的so库
(VERSION 3.19)project(lib_a)set(CMAKE_CXX_STANDARD 11)add_library(lib_a STATIC library_a.cpp)library_a.h..." 库B中调用静态库A" CMAKE_CXX_STANDARD 11)include_directories(${CMAKE_SOURCE_DIR}/third_party...${CMAKE_SOURCE_DIR}/third_party/lib/b/liblib_b.a ${CMAKE_SOURCE_DIR}/third_party/lib/a...静态库A静态库B静态库B中调用静态库A静态库A命令行输入ldd finaltest@ubuntu:~/CLionProjects/lib_test/final/build$ ldd final
前言 C/C++程序的许多同学被静态库的依赖折腾,因为默认情况下要求被依赖的库放在依赖它的库后面,当一个程序或共享库依赖的静态库较多时,可能会陷入解决链接问题的坑中。...但也可以偷懒,不关心静态库的顺序问题,ld为此提供了start-group和end-group两个选项,让包含在这两者间的静态库顺序可以随意。...方法 以CMake为例,假设程序x依赖三个静态库:libX1.a、libX2.a和libX3.a,而libX2.a又依赖libX1.a,libX3.a依赖libX2.a和libX1.a,正常情况下的...,--start-group libX2.a libX1.a libX3.a -Wl,--end-group 附1:链接静态库的顺序问题 在链接静态库时,如果多个静态库之间存在依赖关系,则有依赖关系的静态库之间存在顺序问题...位于“--end-group”之后的仍然要求被依赖的库放在后头。
CMake一个简洁的构建工具,让我们省去了设计复杂的Makefile。...在之前作者已经整理了两篇相关文章,如下: 《CMake,大型项目采用的构建工具》 《CMake 静态库与动态库构建》 今天的文章是基于上一篇的文章的写到的工程继续扩展的,如果对CMake制作动态库和静态库不是很了解的小伙伴...《动态库链接》 在上一节中我们制作了一个librice.so的动态库,并进行了安装,所以我们直接使用这个动态库。...《静态库链接》 静态库链接只需要在上面的例子中修改一点点内容就可以了。.../main test sample rice func $ 有上面的结果看,mian依赖的是静态库。
CMake方式组织编译的库移植以double-conversion库为例,其移植过程如下文所示。...交叉编译编译参考代码仓库的 README.md 中详细介绍了使用CMake编译double-conversion库的步骤,以及测试方法。本文参考该指导设置该库的编译配置,并完成测试。...若开发人员在移植过程中对该库的编译选项配置有疑惑的地方,可参考该指导。对于其他使用CMake可独立编译的三方库,在移植时可以参考其自带的编译指导。...方式可独立编译的三方库移植到OpenHarmony时只需修改CMAKE_FLAG的配置即可。...新增的build_thirdparty.py实现如下,其他采用CMake方式可独立编译的三方库移植到OpenHarmony时无需修改即可使用。
1 Protocol Buffers 简介 protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。...protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。...protobuf 在通信协议和数据存储等领域应用广泛。例如著名的分布式缓存工具 Memcached 的 Go 语言版本groupcache 就使用了 protobuf 作为其 RPC 数据格式。...Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、Python 等多种语言的代码,兼容性好,易于使用...2 安装 2.1 protoc 从 Protobuf Releases 下载最先版本的发布包安装。如果是 Ubuntu,可以按照如下步骤操作(以3.11.2为例)。
关于C ++:Cmake无法找到Boost库 boostc++cmake Cmake cannot find Boost libraries 我是Cmake的新手,并增强了C ++中的库。...现在,您需要查看boost文件夹并找到实际的库。 根据CMake告诉您的使用值检查其路径和名称。 那么,例如,boost线程库的完整路径是什么? 您的配置看起来有些奇怪和肮脏。...这是一个CMake变量,用于控制CMake如何定义带有Boost库的项目的链接阶段。...相关讨论 由于Op是在VS下构建的,因此他的库文件可能最终以stage而不是lib结尾。话虽这么说,在CMake中设置除BOOST_ROOT之外的任何内容已经或多或少地带来了麻烦。...此外,我看到您正在使用VS 2013,调试显示CMake不在搜索*-vc130-库,它仅在搜索-vc120-*。这很可能就是原因。您是否有适用于VS 12或VS 13的Boost库?
它可以用来安装很多内容,可以包括目标二进制、动态库、静态库以及文件、目录、脚本等: install(TARGETS ... [...]) install({FILES | PROGRAMS...,即可执行二进制、动态库、静态库: 目标文件 内容 安装目录变量 默认安装文件夹 ARCHIVE 静态库 ${CMAKE_INSTALL_LIBDIR} lib LIBRARY 动态库 ${CMAKE_INSTALL_LIBDIR...} lib RUNTIME 可执行二进制文件 ${CMAKE_INSTALL_BINDIR} bin PUBLIC_HEADER 与库关联的PUBLIC头文件 ${CMAKE_INSTALL_INCLUDEDIR...} include PRIVATE_HEADER 与库关联的PRIVATE头文件 ${CMAKE_INSTALL_INCLUDEDIR} include 为了符合一般的默认安装路径,如果设置了DESTINATION...:可执行二进制myrun安装到{CMAKE_INSTALL_BINDIR}目录,动态库libmylib.so安装到{CMAKE_INSTALL_LIBDIR}目录,静态库libmystaticlib.a
/han1202012/87358942 一、CMake 工程中配置 OpenCV 库文件 ---- 在上一篇博客 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的...CMake 工程 ② ( VS 中创建 CMake 工程 | CMake 工程中配置 OpenCV 头文件 ) 中 在 Visual Studio 2019 环境下的 CMake 工程中配置了 OpenCV...头文件的搜索路径 ; # CMakeList.txt: OpenCV_Demo 的 CMake 项目,在此处包括源代码并定义 # 项目特定的逻辑。...下面开始配置 OpenCV 函数库库 ; 首先 , 要配置 OpenCV 的函数库搜索路径 ; OpenCV 在 Windows 中的安装路径为 Y:\001_DevelopTools\032_OpenCV...build/x64/vc15/lib") 注意 , CMakeLists.txt 构建脚本中的目录都要使用 / 进行分割 ; 然后 , 链接 OpenCV 的具体的函数库 ; 设置完 函数库 搜索路径后
在用cmake生成Caffe工程文件的时候,如果你使用Protobuf 3.0以上的版本,cmake可能会产生如下的报错: CMake Error at cmake/ProtoBuf.cmake:18...ProtoBuf 3.0的库呢?...以libprotobuf-lite库为例说明, 打开protobuf_installation/cmake/protobuf-targets.cmake,你会发现文件中有如下的代码 add_library...) 这两段代码定义了一个IMPORTED 类型的target,名字叫 protobuf::libprotobuf-lite,target的属性中定义了include文件夹的位置以及库的位置。...那么应用程序要使用libprotobuf-lite库,只需像以前一样调用 target_link_libraries将protobuf::libprotobuf-lite添加 到依赖库列表中就可以了。
如果要更方便地压缩/解压缩文件或者文件夹,除了使用基于zlib的minizip库,更推荐使用另一个基于zlib的库libzip,个人认为其接口设计更科学一点,文档也更丰富一点。...不过libzip库本身的构建倒是没什么特别的,关键指令如下所示: # 配置CMake cmake .....--config RelWithDebInfo # 安装阶段,指定构建类型和安装目标 cmake --build ....--config RelWithDebInfo --target install 其中,设置CMAKE_PREFIX_PATH能够保证能够正确找到安装在这么目录下的zlib,而BUILD_DOC、BUILD_EXAMPLES...、BUILD_REGRESS和ENABLE_OPENSSL都是笔者认为无关紧要的配置项,故设置为OFF。
这种库使用起来确实太方便了,所以现在很多库都采取了这种设计。我们知道C/C++的声明和实现是分开的,所以使用起来相当的麻烦,相同的函数签名总是要写两次,然后把实现隐藏起来编译成静态库或者动态库。...这种风格的库就完全不会有这个问题,include头文件就行。不过这种风格也不是没有缺点,比如增加了调用方的构建时间、构建成果体积增加、符号冲突、不能隐藏实现等,所以采用这种风格的库一般都是模板库。...Header Only库也并不意味着不需要构建,因为构建还是包含很多步骤的,使用CMake进行构建的关键指令如下: # 配置CMake cmake .....另外,还会生成一些.cmake格式的包配置文件到安装目录,这些文件是便于其他项目找到和使用这些Eigen的。...不止Eigen,大多数CMake构建的库都会生成类似的包配置文件,这一点我们放在后续的文章中进行一步论述。
不过有的依赖库是并没有CMakeList.txt文件,也就是官方没有提供CMake的构建方式,例如本篇要说的GIFLIB。GIFLIB是一个开源的C库,用于处理GIF(图形交换格式)图像文件。...GIFLIB是个典型的基于Linux环境的开源库,使用Makefile组织项目配置文件,在Linux环境中通过make工具进行构建。那么在Windows下如何进行构建呢?...不过这种方案很麻烦,最关键的是Windows下MinGW编译的库和MSVC编译的动态库可能存在二进制兼容的问题。...另外一种方案是,如果库的代码量并不大,可以自己组织CMakeList.txt文件进行编译,这里笔者在网上找到了某个大神组织的GIFLIB项目的CMakeList.txt文件: # 输出cmake版本提示...lib # 对于静态库 RUNTIME DESTINATION bin # 对于可执行文件 ) 基于这个CMakeList.txt,笔者组织了GIFLIB的5.2.2版本,关键的构建指令如下所示
理论上来说,上述几个库不是OSG的必须依赖库,但是将它们作为依赖库构建,OSG的功能就更完整。 2. 构建过程 构建OSG库的关键指令如下所示: # 配置CMake cmake .....我们把所有的库都安装到同一个目录中并设置成CMAKE_PREFIX_PATH变量,这样在构建新的依赖库的时候,CMake就能准确查找到相关的依赖库。...经验总结 构建像OSG这样的大型程序库,最好多看看CMake配置完成后的输出信息,例如这里的输出信息如下所示: CMake Deprecation Warning at CMakeLists.txt:16...最后还把找到的依赖库和没找到的依赖库都列出来了。关于这一点,我们只需要重点关心我们需要的依赖库是否识别成功了即可,以为有的大型库的依赖项非常多,不太可能一次性就把完整的依赖项准备好。...总之,多看看的构建配置的输出信息和选项,熟能生巧,有了经验以后就能又快又好地构建依赖库了。
1 介绍 BLAS(Basic Linear Algebra Subprograms)和 LAPACK(Linear Algebra Package)是两个广泛使用的高性能数值线性代数库,主要用于科学计算...不过官方库的实现虽然正确,但是性能比较差,所以厂商和社区提供了高度优化的实现: 实现 特点 OpenBLAS 开源,自动优化 CPU 架构,广泛用于 Linux/Python 科学栈 Intel MKL...构建 承接之前系列文章《CMake构建学习笔记-目录》的构建思路,具体构建脚本简化如下: # OpenBLAS.ps1 param( [string]$Name = "OpenBLAS-...不过,其实CMake构建大部分程序的关键在于自定义的构建参数: BUILD_TESTING、BUILD_SHARED_LIBS、BUILD_STATIC_LIBS的含义就是字面意思,这里就不再说明。...,但会增加库的大小。