当我尝试在64位FreeBSD中编译C应用程序时出现以下错误:
在制作共享对象时不能使用重定位R_X86_64_32S; 用-fPIC重新编译
什么是R_X86_64_32S搬迁,什么是R_X86_64_64?
我已经用Google搜索了错误,这可能是原因 - 如果有人能说出R_X86_64_32S的真正意义,那就太好了.
C++链接如何在实践中发挥作用?我正在寻找的是关于链接如何发生的详细解释,而不是链接的命令.
关于编译已经有类似的问题,但没有详细说明:编译/链接过程如何工作?
我有一些代码在编译时给我重定位错误,下面是一个说明问题的示例:
program main
common/baz/a,b,c
real a,b,c
b = 0.0
call foo()
print*, b
end
subroutine foo()
common/baz/a,b,c
real a,b,c
integer, parameter :: nx = 450
integer, parameter :: ny = 144
integer, parameter :: nz = 144
integer, parameter :: nf = 23*3
real :: bar(nf,nx*ny*nz)
!real, allocatable,dimension(:,:) :: bar
!allocate(bar(nf,nx*ny*nz))
bar = 1.0
b = bar(12,32*138*42)
return
end
Run Code Online (Sandbox Code Playgroud)
编译这个gfortran -O3 -g -o test test.f,我得到以下错误:
relocation truncated to fit: R_X86_64_PC32 against symbol `baz_' defined in COMMON section in …Run Code Online (Sandbox Code Playgroud) 在我努力了解如何使用 GNU binutils 使用 Gas构建简单的引导加载程序时,我遇到了一个问题,如何告诉链接器将数据放在使用 .org 推进位置计数器的文件中的位置同时将文件大小保持在 512 字节。我似乎找不到办法做到这一点。
尝试执行此操作的汇编程序是:
# Author: Matthew Hoggan
# Date Created: Tuesday, Mar 6, 2012
.code16 # Tell assembler to work in 16 bit mode
.section .data
msg: # Message to be printed to the screen
.asciz "hello, world"
.section .text
.globl _start # Help linker find start of program
_start:
xor %ax, %ax # Zero out ax register (ah used to specify bios function to Video Services)
movw %ax, %ds # Since …Run Code Online (Sandbox Code Playgroud) 我正在使用配备Intel Core 2 CPU和2GB RAM的计算机.SO是Ubuntu 9.04.当我尝试编译此代码时:
;programma per la simulazione di un terminale su PC, ottenuto utilizzando l'8250
;in condizione di loopback , cioè Tx=Rx
section .code64
section .data
TXDATA EQU 03F8H ;TRASMETTITORE
RXDATA EQU 03F8H ;RICEVITORE
BAUDLSB EQU 03F8H ;DIVISORE DI BAUD RATE IN LSB
BAUDMSB EQU 03F9H ;DIVISORE DI BAUD RATE IN MSB
INTENABLE EQU 03F9H ;REGISTRO DI ABILITAZIONE DELL'INTERRUZIONE
INTIDENTIF EQU 03FAH ;REGISTRO DI IDENTIFICAZIONE DELL'INTERRUZIONE
LINECTRL EQU 03FBH ;REGISTRO DI CONTROLLO DELLA LINEA
MODEMCTRL EQU 03FCH …Run Code Online (Sandbox Code Playgroud)