/usr/bin/ld: i386 architecture of input file `ReadWrite_c.o' is incompatible with i386:x86-64 output collect2: error: ld returned 1 exit status
时间: 2023-07-12 13:03:18 浏览: 58
这个错误表示您的代码中有一些文件编译为32位(i386),而您的编译器却尝试将其与64位(x86-64)的文件链接。这通常是因为您的编译器使用了错误的选项或库,或者您的代码包含一些不兼容的指令。
解决这个问题的方法可能因您的具体情况而异,但是一些常见的解决方法包括:
- 确保您的编译器选项和库是正确的,例如,如果您使用的是GCC,则需要使用 `-m32` 选项来编译32位代码。
- 检查您的代码是否包含不兼容的指令或函数,例如,一些特定于32位的指令可能无法在64位系统上运行。
- 如果您正在链接其他库,则确保这些库也具有与您的代码相同的架构。
相关问题
gcc -o test main.c ReadWrite_c.o /usr/bin/ld: i386 architecture of input file `ReadWrite_c.o' is incompatible with i386:x86-64 output collect2: error: ld returned 1 exit status
这个错误表示您的代码中有一些文件编译为位(i386),而您的编译器却尝试将其与64位(x86-64)的文件链接。这通常是因为您的编译器使用了错误的选项或库,或者您的代码包含一些不兼容的指令。
为了解决这个问题,您需要使用 `-m32` 选项来编译和链接您的代码,以确保它们都是32位的。例如,您可以使用以下命令来编译和链接您的代码:
```
gcc -m32 -o test main.c ReadWrite_c.o
```
这将使用 `-m32` 选项来编译和链接您的代码,以确保它们都是32位的。这应该可以解决您遇到的链接错误。
/usr/bin/ld: ReadWrite_c.o: relocation R_X86_64_PC32 against symbol `_ZSt4cout@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status
这个错误是因为在编译一个共享库时,使用的对象文件(ReadWrite_c.o)中包含需要动态链接的标准库符号(例如cout),但是这些符号的位置不能确定,需要在运行时动态链接。而编译的过程中缺少-fPIC选项,导致无法生成可用于动态链接的代码。
要解决这个错误,可以在编译ReadWrite_c.o时添加-fPIC选项,例如:
```
g++ -c -fPIC ReadWrite_c.cpp -o ReadWrite_c.o
```
然后再重新编译共享库即可。如果在链接时仍然出现类似的错误,可以尝试添加-fPIC选项重新编译所有的对象文件。