编译问题汇总

简介: 每次在编译各类第三方库的时候都会碰到很多问题,基本上都是通过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, 所以如果这个缺少的话,说明是动态链接库没有链接上,所以我们需要手动去额外链接.

相关文章
|
程序员 Linux Android开发
libYuv编译
安卓使用NDK编译libYuv库
461 0
|
机器学习/深度学习 运维 自然语言处理
系统程序的编译与处理
系统程序的编译与处理
|
缓存 Java Shell
ThingsBoard详细编译指南2.4.3
ThingsBoard详细编译指南2.4.3
625 0
C++程序的编译过程
C++程序的编译过程
|
自然语言处理 编译器 C语言
C/C++程序的编译过程
C/C++程序的编译过程
217 0
C/C++程序的编译过程
jpegNPP编译为so
jpegNPP编译为so
85 0
|
自然语言处理
编译
编译
117 0
|
Web App开发 存储 缓存
V8 编译浅谈
本文是一个 V8 编译原理知识的介绍文章,旨在让大家感性的了解 JavaScript 在 V8 中的解析过程。
V8 编译浅谈
|
开发工具 C++ git
DCMTK-001-3.6.6编译
DCMTK-001-3.6.6编译
291 0
DCMTK-001-3.6.6编译
|
Python
编译过程
编译系统的运行过程 源代码 --> 机器代码 解释器运行程序的方法 1.直接运行高级编程语言 2.转换高级编程语言码到一些有效率的字节码(Bytecode),并运行这些字节码 Python解释语言特点 "拆解"代码: 首先当用户键入代码交给Python处理的时候会先进行此法分析,例如用户...
795 0