Eigen是一个高性能的C++线性代数库,广泛用于科学计算、机器学习、计算机视觉等领域。不过,Eigen有点特别,它是一个纯头文件实现的库;也就是说,任何一个程序要引入它,只要include它的头文件就可以了。这天然就规避了不同操作系统不同编译器造成的二进制兼容的问题,所有的实现都include源代码了,那还不是轻松跨平台?
像Eigen这种风格的库就被称为Header Only库。这种库使用起来确实太方便了,所以现在很多库都采取了这种设计。我们知道C/C++的声明和实现是分开的,所以使用起来相当的麻烦,相同的函数签名总是要写两次,然后把实现隐藏起来编译成静态库或者动态库。这种风格的库就完全不会有这个问题,include头文件就行。不过这种风格也不是没有缺点,比如增加了调用方的构建时间、构建成果体积增加、符号冲突、不能隐藏实现等,所以采用这种风格的库一般都是模板库。
Header Only库也并不意味着不需要构建,因为构建还是包含很多步骤的,使用CMake进行构建的关键指令如下:
# 配置CMake
cmake .. -G "$Generator" -A x64 `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_PREFIX_PATH="$InstallDir" `
-DCMAKE_INSTALL_PREFIX="$InstallDir" `
-DBUILD_TESTING=OFF
# 构建阶段,指定构建类型
cmake --build . --config RelWithDebInfo
# 安装阶段,指定构建类型和安装目标
cmake --build . --config RelWithDebInfo --target install
如果设置不构建测试程序,这个构建过程其实就是复制必须的头文件到安装目录。另外,还会生成一些.cmake格式的包配置文件到安装目录,这些文件是便于其他项目找到和使用这些Eigen的。不止Eigen,大多数CMake构建的库都会生成类似的包配置文件,这一点我们放在后续的文章中进行一步论述。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容