/ usr / bin / ld: пропуск несовместимого /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.a при поиске -lstdc ++ / usr / bin / ld: не удается найти -lstdc ++ - PullRequest
1 голос
/ 05 марта 2020

почему я получаю эту ошибку?

g++ -m32 func.o test.o -o prgram

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status

мой код выглядит следующим образом:

#include<stdio.h>
  2 
  3 
  4 extern "C" int calcsum(int a, int b, int c);
  5 
  6 int main(int argc,char* argv[])
  7 {
  8     int a = 10;
  9     int b = 20;
 10     int c = 30;
 11     int sum = calcsum(a,b,c);
 12 
 13     printf("a: %d", a);
 14     printf("b: %d", b);
 15     printf("c: %d", c);
 16     printf("sum: %d", sum);
 17     return 0;
 18 }
 19 
 1 section .text
  2     global _start
  3 _start:
  4 global _calcsum
  5 _calcsum:
  6 
  7     push ebp
  8     mov ebp, esp
  9 
 10     mov eax, [ebp+8]
 11     mov ecx, [ebp+12]
 12     mov edx, [ebp+16]
 13 
 14     add eax, ecx
 15     add eax, edx
 16 
 17     pop ebp
 18     ret

1 Ответ

1 голос
/ 05 марта 2020

Вы создаете 32-разрядный двоичный файл в 64-разрядной системе (поскольку вы использовали флаг -m32), но не установили 32-разрядные версии библиотек разработки.

Если вы ' на Ubuntu попробуйте:

sudo apt install gcc-multilib g++-multilib libc6-dev-i386

Что касается вашего файла сборки, он не может работать как есть. start будет определен файлом cpp, поэтому удалите его из файла asm. Затем удалите подчеркивание из _calcsum. При создании двоичных файлов ELF имена функций не начинаются со знака подчеркивания:

section .text
global calcsum
calcsum:

    push ebp
    mov ebp, esp

    mov eax, [ebp+8]
    mov ecx, [ebp+12]
    mov edx, [ebp+16]

    add eax, ecx
    add eax, edx

    pop ebp
    ret

Создайте его как 32-битный объектный файл ELF с помощью:

nasm -felf32 func.s -o func.o
...