/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-08 14:46:52 浏览: 170
这个错误是由于编译时使用了 32 位的选项,而当前系统是 64 位的,所以链接器无法将 32 位的目标文件与 64 位的库文件进行链接导致的。
要解决这个错误,你需要使用 `-m32` 选项来将代码编译为 32 位的目标文件,然后再进行链接。例如,如果你使用 GCC 编译器,可以使用以下命令:
```
gcc -m32 ReadWrite_c.c -o ReadWrite_c
```
这里的 `-m32` 选项表示使用 32 位的目标文件和库文件进行链接。执行以上命令后,应该可以成功编译和链接程序了。
相关问题
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选项重新编译所有的对象文件。
阅读全文