---
title: 指定pic、pie
description: "某些动态库在未使用pic/pie选项的情况下，会报符号表缺失的错误，比如："
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0039.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0039.html
indexId: ce708a84c1995ab09692338f864a384514a4166ae42e2578eadf9816d3b2306a74
---
# 指定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]
```
