报错:
/usr/bin/ld: ./obj/libtest.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4 which may bind externally can not be used when making a shared object; recompile with -fPIC

/usr/bin/ld: ./obj/libtest.o(.text.startup+0x34): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4

make -f LibMakefile_aarch64
make[1]: 进入目录“/home/huanghe/Desktop/WSDK_Linux/samples”
g++ -std=c++11 -c  -I../include  ./src/libtest.cpp  -Os -D_FX_OS_=_FX_LINUX_DESKTOP_
./src/libtest.cpp: In function ‘int scan_image()’:
./src/libtest.cpp:177:43: warning: ISO C++ forbids converting a string constant to ‘GCH_LPSTR’ {aka ‘char*’} -Wwrite-strings]char *devlist = gch_GetDevicesList(";"); //返回 型号1;型号2; 需要自行分隔^
./src/libtest.cpp:315:1: warning: control reaches end of non-void function [-Wreturn-type]}^
g++ -fPIC -shared -o .//libtest.so ./obj/*.o  -L../lib/aarch64  -Xlinker "-(" -Wl,-rpath=../lib/aarch64/ -lScanImagesdk[aarch64] -Xlinker "-)" -lz -ldl # -fopenmp -lfontconfig
/usr/bin/ld: ./obj/libtest.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: ./obj/libtest.o(.text.startup+0x34): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
/usr/bin/ld: 最后的链结失败: bad value
collect2: error: ld returned 1 exit status
make[1]: *** [LibMakefile_aarch64:42:all] 错误 1
make[1]: 离开目录“/home/huanghe/Desktop/WSDK_Linux/samples”
make: *** [Makefile:20:default] 错误 2

解决:

  1. 加上-mcmodel=large编译选项
    -mcmodel=large 使可执行文件使用64位绝对地址访问数据段,这会减慢内核速度并使其更大。
  2. 加上 -O2
#Winmage WSDK project DEMO for aarch64 CPU
## Tools.
CC          =  gcc
LD          =  gcc
RM          =  -/bin/rm -f#
# Parameters for tools.
REL_FLAGS   =  -Os -D_FX_OS_=_FX_LINUX_DESKTOP_# Parameters for the current project.
SRC_DIR     =  ./srcSOURCES         =       $(SRC_DIR)/libtest.cpp $(SRC_DIR)/json.hppOBJ_DIR     =  ./obj
REL_BIN_DIR =  ./
LIB_DIR     =  ../lib/aarch64
INC_DIRS    =       -I../include #-I/usr/local/Trolltech/Qt-4.8.7/includeREL_DIRS  =  -L$(LIB_DIR)REL_LIBS    =   -Xlinker "-(" -Wl,-rpath=../lib/aarch64/ -lScanImagesdk[aarch64] -Xlinker "-)"REL_OBJ_DIR =  $(OBJ_DIR)REL_BIN         =    libtest.so#
all: $(SOURCES)$(CC) -O2 -mcmodel=large -c $(CFLAGS) $(INC_DIRS) $(SOURCES)  $(REL_FLAGS)@-mkdir -p $(REL_OBJ_DIR)@mv *.o $(REL_OBJ_DIR)@-mkdir -p $(REL_BIN_DIR)$(LD) -O2 -mcmodel=large -fPIC -shared -o $(REL_BIN_DIR)/$(REL_BIN) $(REL_OBJ_DIR)/*.o  $(REL_DIRS)  $(REL_LIBS) -lz -ldl # -fopenmp -lfontconfig #clean:$(RM) $(REL_BIN_DIR)/$(REL_BIN) $(REL_OBJ_DIR)/*.o  *.o      

参考:
http://ilinuxkernel.com/?p=1738
https://www.itdaan.com/blog/2017/11/28/fae8cf800fd5f697387fe6889fd93e42.html

relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol may bind externally can not be used 【ARM64平台编译】相关推荐

  1. C++学习(三九四)relocation R_AARCH64_ADR_PREL_PG_HI21 undefined reference to `__dso_handle‘

    错误原因:geotiff.cpp使用了static std::mutex oDeleteMutex;将其注释掉即正常.将getotiff.cpp改为如下进行编译和链接,仍会报错. #include & ...

  2. 【已解决】ibyaml-cpp.a(memory.cpp.o): relocation R_X86_64_PC32 against symbol `_ZTVSt16_Sp_counted_baseIL

    问题描述 工程文件依赖yaml-cpp,在编译工程文件时显示如下问题 /usr/bin/ld: /usr/local/lib/libyaml-cpp.a(memory.cpp.o): relocati ...

  3. 全网首发:relocation R_X86_64_PC32 against symbol can not be used when making a shared object recompile

    错误 /usr/bin/ld: /usr/local/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol ` ...

  4. Xavier(6):ubuntu18.04安装casadi 报错与解决(recompile with -fPIC)

    报错: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `N_VClone_Serial' which may bind externally ...

  5. cannot resolve symbol r_64位ret2_dl_runtime_resolve模版题以及踩坑记录

    什么是ret2dl攻击 当程序在第一次加载某个函数的时候,got表中对应的表项还没有写入真实的地址(因为是第一次调用),所以这个时候就需要调用_dl_runtime_resolve函数将真实的地址写入 ...

  6. ldd /usr/bin/mysql_mysql客户端登录时报mysql: relocation error错误

    在安装了xtrabackup后,再用下列命令登录时报下列错误 [root@localhost ~]# mysql -u root -p mysql: relocation error: mysql: ...

  7. std::bind绑定成员函数,为什么第二个参数必须绑定对象地址

    std::bind 这个函数在绑定成员函数的时候,必须显示指明实例化后的对象的地址. 因为在此处bind的第一个参数是 类 的成员函数的地址,没有经过实例化,所以不是内存中真正的位置,需要配合实例化后 ...

  8. java程序编译错误属于异常吗_“Cannot find symbol”编译错误是什么意思?

    "Cannot find symbol"编译错误是什么意思? 1."Cannot find symbol"错误是什么意思? 首先,它是编译错误1.这意味着,无论 ...

  9. ELF应用程序二进制接口

    ELF应用程序二进制接口 荣涛 2021年11月2日 文档修改日志 日期 修改内容 修改人 备注 2021年11月2日 创建 荣涛 摘自https://docs.oracle.com/ 2021年11 ...

  10. Section Header Table

    Section Header Table 1.What is the section header table?   A section is not a segment.Segments are n ...

最新文章

  1. java使用jeids实现redis2.6的String操作(1)
  2. ubuntu安装Linux网络配置,CentOS和Ubuntu系统简要网络配置及常用网络管理工具汇总...
  3. 120_PowerBI堆积瀑布图_R脚本Visual
  4. python定义变量_Python基础 变量的基本使用
  5. Flutter 是移动应用程序开发的未来?
  6. java list增改查_Java编程通过list接口实现数据的增删改查代码示例
  7. 如何在csdn写博客
  8. 2012中国云实践之企业总评榜
  9. GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
  10. 源恒软件产品---地产行业集团税务信息化解决方案
  11. ViewportWidth,Width,MeasuredWidth
  12. 探讨OC的内存管理 以及防止循环引用retain cycle 代理为什么用weak block为什么用copy
  13. 新手程序员必备10大技能
  14. easyui简单demo
  15. go 中 结构体 map互转
  16. Django-实现分页
  17. python生成图像公章,用PPT就可以做印章?是的,超简单超逼真,教你一分钟搞定...
  18. 标品怎样开直通车?标品开直通车的步骤是什么?标品怎样开直通车能获得高转化?
  19. OpenGL二 - 画一个五角星 pentagram
  20. 【ARM】仅用三个GPIO口实现串行SSI信号读取

热门文章

  1. 如何检查SFP光模块的光信号强度?
  2. 商业力:开发者一站式服务
  3. rescale matlab,frft_matlab integrated algorithm about Frft, matla - CodeBus
  4. 机器学习之数据集划分-k折交叉验证法(k-fold cross validation)
  5. c#:判断一个数组元素中否有重复元素
  6. 基于R的飞机航线数据可视化(卫星地图)
  7. 关于笔记本突然鼠标无法连接,电脑蓝牙消失的问题
  8. bzoj 3197: [Sdoi2013]assassin 树哈希+树形dp+费用流
  9. 想要成为大牛应该做到以下几点
  10. 三星s20 android 10.0,三星S20猎户CPU系列安卓10.0 TWRP Recovery V3.4.0.10