编译问题汇总

简介: 每次在编译各类第三方库的时候都会碰到很多问题,基本上都是通过Google解决,其实简单反思一下就会发现是对于系统了解的不够,对于各类标准也是了解甚少。所以一而再再而三发生的问题其实是可以尽量去避免的。

每次在编译各类第三方库的时候都会碰到很多问题,基本上都是通过Google解决,其实简单反思一下就会发现是对于系统了解的不够,对于各类标准也是了解甚少。所以一而再再而三发生的问题其实是可以尽量去避免的。

CMake编译系统

Cmake也许是最常用的跨平台编译组织工具了,像我在{% post_link "Cmake工程例子" CMake工程例子 %}中也已经提到过的,首先得学会自己看以及这些文件中的宏定义,指令含义等.其次是要明白针对不同的项目,需要哪些类型的库,以及对应的库的版本都是多少.

编译指令示例

rm -f CMakeCache.txt
export ILMBASE_ROOT=/usr/
export OPENEXR_ROOT=/usr/
export BOOST_ROOT=/usr/lib/x86_64-linux-gnu/
export GLFW3_ROOT=/usr/
export BLOSC_ROOT=/usr/local/include/
export CPPUNIT_ROOT=/usr/
export TBB_ROOT=/usr/
cmake \
    -D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -D PYTHON_INCLUDE_DIR=/usr/include/python2.7 \
    -D CMAKE_CXX_FLAGS=-std=c++11 \
    -D MINIMUM_BOOST_VERSION=1.52 \
    -D ILMBASE_NAMESPACE_VERSIONING=OFF \
    -D OPENEXR_NAMESPACE_VERSIONING=OFF \
    -D USE_GLFW3=ON \
    -D Blosc_USE_STATIC_LIBS=ON \
    -D BLOSC_blosc_LIBRARY=/usr/local/lib/libblosc.so \
    -D GLFW3_glfw_LIBRARY=/usr/lib/x86_64-linux-gnu/libglfw.so \
    -D Ilmbase_HALF_LIBRARY=/usr/lib/x86_64-linux-gnu/libHalf.so \
    -D Ilmbase_IEX_LIBRARY=/usr/lib/x86_64-linux-gnu/libIex.so \
    -D Ilmbase_ILMTHREAD_LIBRARY=/usr/lib/x86_64-linux-gnu/libIlmThread.so \
    -D Openexr_ILMIMF_LIBRARY=/usr/lib/x86_64-linux-gnu/libIlmImf.so \
    -D TBB_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu \
    -D Tbb_TBB_LIBRARY=/usr/lib/x86_64-linux-gnu/libtbb.so \
    -D Tbb_TBBMALLOC_LIBRARY=/usr/lib/x86_64-linux-gnu/libtbbmalloc.so \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    ..

以上是一个最近的的编译文件,其中有很多要调整的部分,最后还是借助Qt的IDE进行编译,有很多自定义的变量通过SET写在CMakeLists.txt中.

库链接

在编译链接第三方库的时候,忘记了这个库还依赖与另外一个库,而且这个库是需要自己引入的.在当时收到的报错信息是:

/usr/bin/ld: /tmp/cckVyv4m.o: undefined reference to symbol '_ZN4half5_eLutE'
//usr/lib/x86_64-linux-gnu/libHalf.so.12: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

这是表示我们的编译器找不到libHalf这个库1,所以我们需要额外去引入这个库,才能使得编译顺利进行.

DSO

DSO为dynamic shared object, 或者换句话说是shared library, 所以如果这个缺少的话,说明是动态链接库没有链接上,所以我们需要手动去额外链接.

相关文章
|
机器学习/深度学习 传感器 算法
matlab改进鲸鱼算法GSWOA 基准函数对比与检验
matlab改进鲸鱼算法GSWOA 基准函数对比与检验
|
算法 网络协议 测试技术
国密SSL协议之性能测试
国密SSL在实际上线和使用过程中,性能就是一个必须面对的问题。 国密SSL和标准SSL相比,算一个新生事物,没有完善齐备的性能测试工具。 本文针对国密SSL性能测试,描述了相关指标,并提供一些基本的方法和工具。
2364 0
国密SSL协议之性能测试
|
Oracle Java 关系型数据库
Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
 在上一篇同系列的博文中,讲到配置多数据源,然后根据config.properties配置不同的数据库,进行切换。而且需要根据不同的数据库,配置不同的mybatis sql映射配置文件,如下: classpath...
2751 0
|
Android开发
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
1672 0
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
|
8月前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
147 28
|
9月前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
205 10
|
C++
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
460 0
|
数据采集 Web App开发 搜索推荐
突破目标网站的反爬虫机制:Selenium策略分析
突破目标网站的反爬虫机制:Selenium策略分析
|
存储 Oracle 关系型数据库
MySQL8 中文参考(二十九)(2)
MySQL8 中文参考(二十九)
365 9