使用 Bear 生成 compile_commands.json
时需要编译 32位库,记录错误及解决过程
Bear
编译命令及错误
$ cmake .. -DCMAKE_C_COMPILER_ARG1="-m32"; VERBOSE=1 make all
Linking C executable cmTC_8b292
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8b292.dir/link.txt --verbose=1
/usr/bin/cc -m32 -rdynamic CMakeFiles/cmTC_8b292.dir/testCCompiler.c.o -o cmTC_8b292
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a 时跳过不兼容的 -lgcc
/usr/bin/ld: 找不到 -lgcc
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a 时跳过不兼容的 -lgcc
/usr/bin/ld: 找不到 -lgcc
可以看到原因是找不到 libgcc.a
解决
系统为 ubuntu18.04
,可以找到 /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a
,需要安装32位支持库
$ sudo apt-cache search libgcc
libgcc1 - GCC 支持库
lib32gcc-7-dev - GCC support library (32 bit development files)
$ sudo apt install lib32gcc-7-dev
$ fd libgcc.a
gcc/x86_64-linux-gnu/7/32/libgcc.a
gcc/x86_64-linux-gnu/7/libgcc.a