使用-fPIC选项编译出protobuf静态库libprotobuf.a

【使用-fPIC选项编译出protobuf静态库libprotobuf.a】用的64位Ubuntu系统,开发一个共享库so使用到了protobuf,如果链接libprotobuf.so就需要一起打包带走,否则可能因protobuf版本较多出现版本不匹配的问题,所以需要它链接静态库libprotobuf.a,但是链接时候报错: relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC。

原因是我用了protobuf的默认编译安装方式安装的,也即是autogen.sh、confiure、make && make install的步骤,如此生成的静态库libprotobuf.a不是PIC object,所以不能被其它动态库使用(因64位的so必须使用-fPIC编译选项,所有要求所链接的静态库也必须是带-fPIC编译)。解决办法是在confiure步骤时加上两个变量参数:./configure CFLAGS="-fPIC"CXXFLAGS="-fPIC"

    推荐阅读