中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

指定pic、pie

错误信息

某些动态库在未使用pic/pie选项的情况下,会报符号表缺失的错误,比如:

undefined reference to `cmsPlugin'

问题介绍

生成动态库与pie可执行文件编译或链接时未带对应pic/pie选项,导致符号表缺失,需要手动指定。

代码示例

执行如下命令检查是否为PIC库,检索到textrel符号则表明是PIC库。

readelf -a libhello.so |grep -i textrel

检查是否为PIE共享文件,使用file命令查看,或者用size --format=sysv查看基地址是否在0附近。

解决方案

编译选项增加-fPIC,链接选项增加-pie

Clang严格区分编译和链接选项,不能通过cflags将-pie传递给链接器,否则会报错:

clang-10: error: argument unused during compilation: '-pie' [-Werror,-Wunused-command-line-argument]