/usr/bin/ld: /tmp/ccj2XNmr.o: warning: relocation against `global_dir' in read-only section `.text' /usr/bin/ld: /tmp/ccj2XNmr.o: in function `fs_walk': fs_walk.c:(.text+0x12c): undefined reference to `global_dir' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status make: *** [Makefile:12:all] 错误 1
时间: 2024-01-28 12:04:10 浏览: 730
这个错误的原因是在编译和链接过程中,无法找到全局变量global_dir的定义。可能是因为在代码中没有定义该变量,或者定义了但是没有正确的链接。
要解决这个错误,你可以检查以下几个方面:
1. 检查代码中是否存在定义global_dir的语句,并确保它的作用域可以被链接器找到。
2. 检查Makefile文件,确保它正确地将源文件和库文件链接在一起。
3. 确认你使用的编译器和链接器是否支持PIE(位置独立可执行文件),如果不支持,可以尝试编译时不使用-fPIE选项。
希望这些提示能帮到你解决问题。
相关问题
/usr/bin/ld: /tmp/ccj2XNmr.o: warning: relocation against `global_dir' in read-only section `.text'
这个警告表示在读取只读段(".text"段)中的全局变量(global_dir)时出现了重定位。这可能是由于编译器将global_dir定义为只读变量,而在链接时尝试对其进行修改所导致的。
要解决这个警告,你需要确保在定义global_dir时,将其声明为可写变量。你可以将它定义为全局变量,或者使用malloc()函数在堆上分配内存。例如:
```c
// 定义可写全局变量
int global_dir;
// 在堆上分配可写内存
int *global_dir = malloc(sizeof(int));
```
如果你确定global_dir不需要在程序运行时被修改,你可以将其定义为const变量,这样编译器就会将它放在只读段中,避免了重定位警告:
```c
// 定义只读全局变量
const int global_dir = 10;
```
/usr/bin/ld: /tmp/ccgos1P6.o: warning: relocation against `global_dir' in read-only section `.text'
这是一个链接器(ld)的警告信息,它表示在读取只读区域(.text)中的全局变量(global_dir)时发生了重定位(relocation)。重定位是指在编译时,由于程序需要访问的数据或函数地址尚未确定,因此编译器只能先将其标记为需要重定位的地址,在链接时再根据实际情况确定其具体地址。在这里,由于global_dir被标记为只读,所以链接器发出了警告。不过,这个警告并不会影响程序的运行。
阅读全文