编译问题汇总

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





Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • conda包组织工具
  • Git手册
  • a distill-style blog post
  • 午间休息
  • PyQt5-Note1 | UI