- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 C
驱动程序文件,它声明了一个 extern
函数,以便在我的 asm
文件中使用它。我在 Windows 7 x64 机器上。
我用 NASM
用这个命令组装了 asm
文件:
nasm avxmain.asm -f win64 -o avxmain.o
然后我像这样编译了C
文件:
gcc avxdriver.c -c -m64 -o avxdriver.o
将它们链接在一起,我运行了:
gcc avxdriver.o avxmain.o -o final
这是我遇到的错误:
avxmain.o:G:\Desktop\CPSC240:(.text+0x50): relocation truncated to fit: R_X86_64_32 against `.bss'
avxmain.o:G:\Desktop\CPSC240:(.text+0xb9): relocation truncated to fit: R_X86_64_32 against `.data'
avxmain.o:G:\Desktop\CPSC240:(.text+0xc2): relocation truncated to fit: R_X86_64_32 against `.data'
avxmain.o:G:\Desktop\CPSC240:(.text+0x14e): relocation truncated to fit: R_X86_64_32 against `.bss'
collect2: error: ld returned 1 exit status
avxdriver.c
文件:#include <stdio.h>
#include <stdint.h>
extern double avxdemo();
int main()
{
double return_code = -99.9;
printf("%s","This program will test for the presence of AVX (Advanced Vector Extensions) also known as state component number 2.\n");
return_code = avxdemo();
printf("%s %1.12lf\n","The value returned to the driver is ", return_code);
printf("%s","The driver program will next send a zero to the operating system. Enjoy your programming.\n");
return 0;
}
avxmain.asm
文件:我把它贴在这里是因为它很长,因为教授提供的评论。
我尝试运行 -fPIC
和 -mcmodel=medium
选项。我仍然遇到同样的错误。我完全迷失和困惑,因为这是我应该为我的类(class)运行的示例项目。这个主题对我来说是全新的。我花了大约半天时间搜索这些错误并尝试不同的方法。我只需要指出正确的方向。
最佳答案
问题是一般的 x64 指令不允许在它们的编码中直接使用 64 位地址。有两种解决方法:
使用movabs rax, symbolNameHere
指令设置rax
为地址,然后使用[rax]
访问数据那个地址。
使用[rel symbolNameHere]
作为操作数;这将创建对 symbolNameHere
的 PC 相对引用。它被编码为 32 位有符号偏移量,无论 rip
执行该指令时的偏移量。
方法 1 允许您在指令中编码绝对地址,而方法 2 是较小的代码(您始终可以执行 lea rax, [rel symbolNameHere]
以获得与方法 1 相同的效果) .
关于c - 重定位被截断以适应 : R_X86_64_32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314357/
我有以下代码行 #define SCB_VTOR SCB_VTOR_REG(SystemControl_BASE_PTR) #define SCB_VTOR_REG(base)
我已经用 C 语言编写了这个函数(函数应该接收一个 char*,分配必要的空间,并插入字符,给出一个指向指针后面字符索引的指针) void add_to_str(char *character, ch
我正在构建一个 ELF 二进制文件,它需要能够在运行时处理和反转其自身的重定位。 (显然,反转将发生在单独的缓冲区中,而不是原始代码页中。)这样做的目的是内存中的模块内容可以进行 HMAC 运算,并与
我花了很多时间来查找错误原因。下面是我的一段 C++ 程序,它使用 vector 来存储数据。我已经看到,当 vector 增加自身大小时,所有引用都会发生变化。因此,通过 back() 对象保存对
首先,对于我的代码中可能出现的废话,我深表歉意,我还只是个初学者。我正在尝试用 编译这段代码 #include #include #include //initial conditions //#de
基本上,我一直在图像上测试 ImageMapster 插件。但是,我希望每个区域标签的工具提示(或信息面板)彼此相邻。 > http://jsfiddle.net/jagmitg/eQCL6/ 目前,
我正在使用 Devtoolset-7在 CentOS 7 上构建了 Boost 1.65.1 w/它。但是当我链接我的应用程序时,我得到了以下信息: /opt/rh/devtoolset-7/root
我正在 Linux 下编写一个简单的用户空间 ELF 加载程序(为什么?为了“好玩”)。目前我的加载器非常简单,旨在仅加载包含位置无关代码的静态链接 ELF 文件。 通常,当一个程序被内核的 ELF
GWT 将生成一个 gwt-unitCache包含一些缓存文件的目录。经过几天的工作,该目录可能会产生超过 1GB 的缓存文件。我担心生成这些文件可能会损坏我的 SSD 硬盘。 我创建了一个 2GB
假设我正在使用一个 int a vector : vector a {1, 2, 34, 1222, 0}; 然后,我想像这样 push_back 一些数据: a.push_back (data);
我刚刚开始进行嵌入式 arm 开发,有一段代码真的让我很烦恼: /* Initialize the relocate segment */ pSrc = &_etext; pDest = &_srel
所以我有一个 block 在 iPhone 内置加速度计的帮助下移动,另一个 block 随机出现在屏幕上。我正在尝试使用 if 语句来确定移动 block 是否点击或触摸了固定目标 block ,如
我想弄清楚重定位是如何工作的,但我似乎无法理解它。 This document描述了在重定位 ELF 文件时可能遇到的不同类型。 我们以 R_ARM_ALU_SB_G0_NC (#70) 为例。 类型
我正在尝试通过 OS X 中的 __builtin_return_address() 获取返回地址: /* foo.c */ #include void foo() { printf("re
我正在寻找与 Gulp 一起使用的插件链,它提供: 源映射支持 少 缩小 串联 URL 替换( rebase )以解决重定位/连接 我目前有前四个,但我找不到现有插件的组合也能给我最后一个(URL r
我正在编写一些适用于 .o 文件的自定义 ELF 二进制后处理代码。部分处理包括对二进制数据执行重定位。输入文件由 GNU 汇编程序根据我自己的汇编代码生成。 看看 GNU 汇编程序生成的这些疯狂的重
所以我一直在编写 32 位代码,昨天我需要构建一个 dll,但我遇到了一些问题。反正我解决了here . 不幸的是,即使我认为一切正常,但当我将程序和 makefile 移动到其他运行 64 位的计算
在今天下午的华为全场景智慧生活新品发布会上,华为还发布了一款华为儿童手表 4X,在防水和定位性能方面进行了升级。 据介绍,华为儿童手表 4X 采用机甲设计风格,一体化表带,防水升级到 50 米
我正在尝试编译的项目一点也不复杂,除了标准库和一个独立的库(一切都在另一个系统上编译正常)之外,什么都不引用。正如标题所示,它甚至不能链接到标准库中的某些东西,因为那里的东西应该没有用 -fPIC 编
我是一名优秀的程序员,十分优秀!