天天看点

linux混编项目总结

Bgfx 在linux下项目的一些编译总结:

  1. 譬如三方库里用include/bx/bx.h这样的文件,我们在代码中引起的方式是

    #include “bx/bx.h”,那么在cmake文件中,target_include_directories假如你包含了三方文件目录include又包含了bx目录,

    xcode和androidStudio是能正常处理的,但是linux下不行,会报各种误导你的错误,譬如c链接失败,c++链接失败,云里雾里。

    此时只用包含include目录即可,不需要bx目录了,如果代码中直接导入bx.h,那么就必须include/bx目录。

  2. 如果最后生成的动态库,那么所有的静态库打包的时候都必须加上-fPIC编译,-fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

    不然,生成库要报错。export CXXFLAGS="-fPIC"

  3. 好多时候代码编译不过,是因为语法支持问题,需要制定你的c++编译版本,例如在cmake中指定set(CMAKE_CXX_STANDARD 14)
  4. 有时候gcc编译不行,请切换到clang编译。
  5. linux上编译,默认装了opencv的话,编译会去找电脑上的opencv,不晓得为啥子。譬如你代码是opencv4,电脑是opencv2,那么用的opencv2.
  6. 代码中用到的系统库一定写到头文件上,同名的头文件,如果引用自己的,记得使用路径标记,不然容易编译出错。
  7. 高版本的编译器是不支持数组长度用float来表示的,必须int。大家代码在定义数组的时候,不要用float表示长度。
  8. 远程使用linux电脑推荐使用TeamViewer,非常方便。