---
title: 指定pic、pie
description: "某些动态库在未使用pic/pie选项的情况下，会报符号表缺失的错误，比如："
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/bisheng/hist-bisheng/kunpengbisheng_06_0039_1.html
sourcePath: /source/zh/kunpengdevkithistory/bisheng/hist-bisheng/kunpengbisheng_06_0039_1.html
indexId: 6c78815f0e5f9388e80a62bd5ea90d4647fd6ca42e1861b20b0f3a3f8748d83182
---
# 指定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: error: argument unused during compilation: '-pie' [-Werror,-Wunused-command-line-argument]
```
