随笔分类 - 编译相关(ndk,gcc)
摘要:1、原因: GCC 5在编译时会将std::string类型按c++11下std::__cxx11::basic_string<char> 来处理,这时如果你调用的库在编译时未启用c++11特性则其中的std::string实际上是std::basic_string<char> ,如果将c++11下
阅读全文
摘要:最近遇到个问题,在链接OpenVINO的时候,需要将libinference_engine.so与libinference_engine_legacy.so都链接进去,但如果在CMakeLists里设置add_definitions(-D _GLIBCXX_USE_CXX11_ABI=0),就无法正
阅读全文
摘要:编译与链接有四个过程: (1)预处理 (2)编译 (3)汇编 (4)链接 (1)预处理源文件和头文件被预处理成一个.i文件、(-E表示只进行预处理) g++ -E hello.cpp -o hello.i -E:意味着只执行到预编译,直接输出预编译结果。 预处理过程主要处理那些源文件中的以“#”开始
阅读全文
摘要:這篇的對象是 static function,static function 若沒有其它 function 去存取的話,在 compile 時,會發生 unused error,可以在 function 前加上 attribute((unused)) 避免出現 unused error,但如果 fu
阅读全文
摘要:1、openmp加载,cmake3.9之后内置了openmp 2、引用的c++11不同会引发编译错误 可通过ANDROID_STL设置 3、可设置输出路径,ARCHIVE_OUTPUT_DIRECTORY表征静态库路径,LIBRARY_OUTPUT_DIRECTORY为动态库路径 4、
阅读全文
摘要:1、生成静态库 生成静态库使用ar工具,其实ar是archive的意思 2、生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: nm列出的符号有很多, 常见的有三种:: 一种是在库中被调用,但并没有在库中定义(表明需要其他库支持),用U表示; 一种是在库中定义的函数,用T表示,这
阅读全文
摘要:基礎知識 GNU ld 最基本的連結單位是 object 檔,即單一個編譯單元所對應的編譯結果,通常副檔名是 .o。在 object 檔所維護的資訊當中,連結器主要關注的是: 輸出符號: 這是定義在 object 檔內,且可提供給外界使用的符號。 未定義符號: 這是被 object 檔使用、需要從外
阅读全文
摘要:编译静态库进入动态库时,有时会出现编译通过,调用时却出现symbol查找不到的问题。 这是因为链接静态库时,只会将编译时用到的符号添加进动态库,有些符号是希望动态加载,在编译的时候并未显示调用。 这时需要将静态库全部链接。 -Wl,option Pass option as an option to
阅读全文