bug记录(1)——cmakefPIC标志使用——libmbedtls.a(ssl_tls.c.o): relocation R_X86_64_PC32 against symbol `mbedtls_x509_crt_profile_suiteb'

cmake fPIC标志使用

1. 背景

有需求如下:

  1. 使用静态编译后的mbedtls给我的项目test使用
  2. 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'

猜你喜欢

转载自www.cnblogs.com/whuwzp/p/fpic_cmake.html