Линковка Сиплюсплюс с Насмом

Тема в разделе "NASM", создана пользователем Frrfeynyfujdyjajhevt, 3 мар 2012.

  1. Frrfeynyfujdyjajhevt

    Frrfeynyfujdyjajhevt New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2012
    Сообщения:
    1
    Есть ассемблерный код, главная процедура, с которой начинается программа, находится в нём. Как присоединить к этому коду функции на C++?

    Я пробовал создать в ассемблерном коде процедуру main (глобальную) и писать дерективу extern для подлючаемой функции, которую писал в отдельном cpp-файле. Потом компилировал в объекный код Elf каждый файл по отдельности и пытался линковать их с помощью gcc. Но у меня ничего не вышло. Как можно сделать, чтобы вышло?

    Компилирую:

    nasm -f elf one.asm
    g++ -Wall -c two.cpp

    Компоную:

    gcc -o program one.o two.o

    Получаю:

    one.o: In function `main':
    one.asm:dntknw:.text+0xb): undefined reference to `myfunction'
    two.o: In function `myfunction()':
    two.cpp:dntknw:.text+0xa): undefined reference to `std::cout'
    two.cpp:dntknw:.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
    two.o: In function `__static_initialization_and_destruction_0(int, int)':
    two.cpp:dntknw:.text+0x38): undefined reference to `std::ios_base::Init::Init()'
    two.cpp:dntknw:.text+0x3d): undefined reference to `std::ios_base::Init::~Init()'
     
  2. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    two.cpp: extern "C" myfunction();
    two.cpp: нужны библиотеки, в которых находятся все эти undefined reference, т.е. вместе с one.o и two.o нужно линковать еще и эти библиотеки.