cmake fPIC标志使用
1. 背景
有需求如下:
- 使用静态编译后的mbedtls给我的项目test使用
- test最终想要编译为动态链接库,即shared
2. 报错信息
如果不加fPIC,正常编译mbedtls生成.a文件, 编译test时报错如下:
libmbedtls.a(ssl_tls.c.o): relocation R_X86_64_PC32 against symbol mbedtls_x509_crt_profile_suiteb can not be used when making a shared object; recompile with -fPIC
意思是让重新带上-fPIC编译(自己百度-fPIC的用途)
3. 解决方法
3.1 CMakelists.txt中修改
# cmakelists.txt中添加如下
# 以下两个看自己用的C++还是c编译器
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
具体的:
# add -fPIC
[mbedtls-mbedtls-2.16.5]$ vim CMakeLists.txt
# 在CMAKE_C_FLAGS标识中增加-fPIC
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -W -Wdeclarati on-after-statement -Wwrite-strings -fPIC")
cmake ..
make
# 然后再用.a文件即可
https://github.com/ARMmbed/mbedtls/issues/3324
3.2 make 命令
以下摘自:https://www.cnblogs.com/HuangWj/p/6739255.html
make CFLAGS='$CFLAGS -fpic'