relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol may bind externally can not be used 【ARM64平台编译】
报错:
/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
解决:
- 加上-mcmodel=large编译选项
-mcmodel=large
使可执行文件使用64位绝对地址访问数据段,这会减慢内核速度并使其更大。 - 加上 -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平台编译】相关推荐
- C++学习(三九四)relocation R_AARCH64_ADR_PREL_PG_HI21 undefined reference to `__dso_handle‘
错误原因:geotiff.cpp使用了static std::mutex oDeleteMutex;将其注释掉即正常.将getotiff.cpp改为如下进行编译和链接,仍会报错. #include & ...
- 【已解决】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 ...
- 全网首发: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 ` ...
- Xavier(6):ubuntu18.04安装casadi 报错与解决(recompile with -fPIC)
报错: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `N_VClone_Serial' which may bind externally ...
- cannot resolve symbol r_64位ret2_dl_runtime_resolve模版题以及踩坑记录
什么是ret2dl攻击 当程序在第一次加载某个函数的时候,got表中对应的表项还没有写入真实的地址(因为是第一次调用),所以这个时候就需要调用_dl_runtime_resolve函数将真实的地址写入 ...
- ldd /usr/bin/mysql_mysql客户端登录时报mysql: relocation error错误
在安装了xtrabackup后,再用下列命令登录时报下列错误 [root@localhost ~]# mysql -u root -p mysql: relocation error: mysql: ...
- std::bind绑定成员函数,为什么第二个参数必须绑定对象地址
std::bind 这个函数在绑定成员函数的时候,必须显示指明实例化后的对象的地址. 因为在此处bind的第一个参数是 类 的成员函数的地址,没有经过实例化,所以不是内存中真正的位置,需要配合实例化后 ...
- java程序编译错误属于异常吗_“Cannot find symbol”编译错误是什么意思?
"Cannot find symbol"编译错误是什么意思? 1."Cannot find symbol"错误是什么意思? 首先,它是编译错误1.这意味着,无论 ...
- ELF应用程序二进制接口
ELF应用程序二进制接口 荣涛 2021年11月2日 文档修改日志 日期 修改内容 修改人 备注 2021年11月2日 创建 荣涛 摘自https://docs.oracle.com/ 2021年11 ...
- Section Header Table
Section Header Table 1.What is the section header table? A section is not a segment.Segments are n ...
最新文章
- java使用jeids实现redis2.6的String操作(1)
- ubuntu安装Linux网络配置,CentOS和Ubuntu系统简要网络配置及常用网络管理工具汇总...
- 120_PowerBI堆积瀑布图_R脚本Visual
- python定义变量_Python基础 变量的基本使用
- Flutter 是移动应用程序开发的未来?
- java list增改查_Java编程通过list接口实现数据的增删改查代码示例
- 如何在csdn写博客
- 2012中国云实践之企业总评榜
- GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
- 源恒软件产品---地产行业集团税务信息化解决方案
- ViewportWidth,Width,MeasuredWidth
- 探讨OC的内存管理 以及防止循环引用retain cycle 代理为什么用weak block为什么用copy
- 新手程序员必备10大技能
- easyui简单demo
- go 中 结构体 map互转
- Django-实现分页
- python生成图像公章,用PPT就可以做印章?是的,超简单超逼真,教你一分钟搞定...
- 标品怎样开直通车?标品开直通车的步骤是什么?标品怎样开直通车能获得高转化?
- OpenGL二 - 画一个五角星 pentagram
- 【ARM】仅用三个GPIO口实现串行SSI信号读取
热门文章
- 如何检查SFP光模块的光信号强度?
- 商业力:开发者一站式服务
- rescale matlab,frft_matlab integrated algorithm about Frft, matla - CodeBus
- 机器学习之数据集划分-k折交叉验证法(k-fold cross validation)
- c#:判断一个数组元素中否有重复元素
- 基于R的飞机航线数据可视化(卫星地图)
- 关于笔记本突然鼠标无法连接,电脑蓝牙消失的问题
- bzoj 3197: [Sdoi2013]assassin 树哈希+树形dp+费用流
- 想要成为大牛应该做到以下几点
- 三星s20 android 10.0,三星S20猎户CPU系列安卓10.0 TWRP Recovery V3.4.0.10