开发者社区> 和山彭于晏> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

编译问题汇总

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
jpegNPP编译为so
jpegNPP编译为so
0 0
V8 编译浅谈
本文是一个 V8 编译原理知识的介绍文章,旨在让大家感性的了解 JavaScript 在 V8 中的解析过程。
0 0
CTK-001-编译
CTK编译 参考链接:https://blog.csdn.net/blackwoodcliff/article/details/107624047?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-5&spm=1001.2101.3001.4242
0 0
libyuv编译【转】
转自:http://blog.csdn.net/kl222/article/details/41309541 版权声明:本文为博主原创文章,未经博主允许不得转载。 下载代码(要FQ): git clone http://git.
835 0
VS2013编译python源码
系统:win10 手头有个python模块,是用C写的,想编译安装就需要让python调用C编译器。直接编译发现使用的是vc9编译,不支持C99标准(两个槽点:为啥VS2008都还不支持C99?手头这个C代码为啥不好好写?) anyway,此时两个想法,一个是改C源码,另一个是自行用VS2013编译一个python。
897 0
编译ITK
【2016年7月4周】编译ITK 1、下载必备文件 InsightToolkit-4.8.1、cmake 2、cmake编译 修改CMAKE_INSTALL_PREFIX配置到需要生成的目录下面去。
577 0
编译rnnlib
rnnlib,一个多年不更新的rnn库,编译的过程有点麻烦,好多东西要选特定版本的。这里记录一下我的配置脚本,在ubuntu14.04下测试ok。 P.S fedora下好像不能直接用包管理来安装指定版本的gcc/g++,这一点上ubuntu还是很人性化的。
665 0
+关注
和山彭于晏
我们生来无知 而且只有很少的时间 来改变这种无知的状况
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载