LINUX.ORG.RU

Qemu, автокомпиляция C++ проектов

 , ,


1

8

Здравствуйте!
Подскажите, пожалуйста, как при помощи qemu и gcc-arm-none-eabi можно запустить простейший С++ проект с заданными ограничениями по памяти?
Хост-машина на Fedora.



Последнее исправление: hetop (всего исправлений: 1)

Я не понял, ты хочешь компилятор под qemu запускать и ограничивать его по памяти?

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Кросс будет использоваться для компиляции. Qemu для ограничений по памяти(очень маленький объём на том оборудовании, где в итоге все будет запускаться).

hetop
() автор топика
Ответ на: комментарий от hetop

Я не понял, ты хочешь компилятор под qemu запускать и ограничивать его по памяти?

Да

DELIRIUM ☆☆☆☆☆
()

Подскажите, пожалуйста, как при помощи qemu и gcc-arm-none-eabi можно запустить простейший С++ проект с заданными ограничениями по памяти?

Сделать виртуальную машину с заданным количеством памяти и запустить в ней бинарник, собранный с помощью тулчейна gcc-arm-none-eabi на хосте без всяких ограничений, не?

asaw ★★★★★
()

Пытаюсь скомпилировать HelloWorld

arm-none-eabi-c++ -g test.cpp -o hello-CM0.axf
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libstdc++.a(locale.o): In function `get_locale_cache_mutex':
/builddir/build/BUILD/arm-none-eabi-gcc-cs-6.2.0/gcc-arm-none-eabi/arm-none-eabi/libstdc++-v3/src/c++98/../../../../../gcc-6.2.0/libstdc++-v3/src/c++98/locale.cc:36: undefined reference to `__sync_synchronize'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libstdc++.a(locale_init.o): In function `(anonymous namespace)::get_locale_mutex()':
/builddir/build/BUILD/arm-none-eabi-gcc-cs-6.2.0/gcc-arm-none-eabi/arm-none-eabi/libstdc++-v3/src/c++98/../../../../../gcc-6.2.0/libstdc++-v3/src/c++98/locale_init.cc:66: undefined reference to `__sync_synchronize'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libstdc++.a(future.o): In function `__future_category_instance':
/builddir/build/BUILD/arm-none-eabi-gcc-cs-6.2.0/gcc-arm-none-eabi/arm-none-eabi/libstdc++-v3/src/c++11/../../../../../gcc-6.2.0/libstdc++-v3/src/c++11/future.cc:64: undefined reference to `__sync_synchronize'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-abort.o): In function `abort':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/abort.c:63: undefined reference to `_exit'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-exit.o): In function `exit':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/exit.c:70: undefined reference to `_exit'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-fstatr.o): In function `_fstat_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-openr.o): In function `_open_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/openr.c:59: undefined reference to `_open'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-sbrkr.o): In function `_sbrk_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-signalr.o): In function `_kill_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:61: undefined reference to `_kill'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-signalr.o): In function `_getpid_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:97: undefined reference to `_getpid'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-writer.o): In function `_write_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/writer.c:58: undefined reference to `_write'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-closer.o): In function `_close_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/closer.c:53: undefined reference to `_close'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-isattyr.o): In function `_isatty_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-lseekr.o): In function `_lseek_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/libg.a(lib_a-readr.o): In function `_read_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/readr.c:58: undefined reference to `_read'
collect2: error: ld returned 1 exit status
В гугле ответа не нашёл, а может неправильно ищу.
Не подскажете как это решить?

hetop
() автор топика
Ответ на: комментарий от hetop

От ошибок вылечился командой

arm-none-eabi-g++ -mthumb -mcpu=cortex-m3 -c test.cpp -o test.o 
Но при попытке запуска получаю:
$ qemu-arm -cpu cortex-m3 ./test.o
Error while loading ./test.o: Permission denied
Так как итоговый файл получается неисполняемым. chmod +x ситуацию не спасает.

hetop
() автор топика
Ответ на: комментарий от DELIRIUM
$arm-none-eabi-g++ -mthumb -mcpu=cortex-m3  test.cpp -o test
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-abort.o): In function `abort':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/stdlib/../../../../../../newlib/libc/stdlib/abort.c:63: undefined reference to `_exit'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-exit.o): In function `exit':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/stdlib/../../../../../../newlib/libc/stdlib/exit.c:70: undefined reference to `_exit'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-fstatr.o): In function `_fstat_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-openr.o): In function `_open_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/openr.c:59: undefined reference to `_open'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-signalr.o): In function `_kill_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/signalr.c:61: undefined reference to `_kill'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-signalr.o): In function `_getpid_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/signalr.c:97: undefined reference to `_getpid'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-writer.o): In function `_write_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/writer.c:58: undefined reference to `_write'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-closer.o): In function `_close_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/closer.c:53: undefined reference to `_close'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-isattyr.o): In function `_isatty_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-lseekr.o): In function `_lseek_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek'
/usr/lib/gcc/arm-none-eabi/6.2.0/../../../../arm-none-eabi/lib/armv7-m/libc.a(lib_a-readr.o): In function `_read_r':
/builddir/build/BUILD/newlib-2.4.0/build-newlib/arm-none-eabi/armv7-m/newlib/libc/reent/../../../../../../newlib/libc/reent/readr.c:58: undefined reference to `_read'
collect2: error: ld returned 1 exit status
hetop
() автор топика
Ответ на: комментарий от asaw

фигасе, я хотел слово-в-слово такой же коммент написать, но передумал. сейчас показалось, что я его таки оставил О_о

Deleted
()
Ответ на: комментарий от cvv

Совсем нет опыта работы с компиляторами. Не подскажешь, пожалуйста, как это можно сделать? Система - Fedora 23.

hetop
() автор топика
Ответ на: комментарий от cvv

При

$ arm-none-eabi-g++ -mthumb  -mcpu=cortex-m3 -static --specs=nosys.specs test.cpp
Получаю на выходе файл. Но:
$ qemu-arm -cpu cortex-m3 ./a.out
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Ошибка сегментирования (core dumped) 

hetop
() автор топика
Ответ на: комментарий от hetop

у тебя компилятор для baremetal - в нем не предусмотрена поддержка libc. Если без libc никак то ищи/собирай arm-none-uclinux-uclibceabi.

anonymous
()
Ответ на: комментарий от hetop
$ cat test.c
#include <stdio.h>
int main(void)
{
        printf("Hello LOR!\n");
        return 0;
}
$ arm-none-uclinux-uclibceabi-gcc -mthumb  -mcpu=cortex-m3 test.c -static
$ qemu-arm -cpu cortex-m3 a.out
Hello LOR!
anonymous
()
Ответ на: комментарий от DELIRIUM

Непонятно возможно ли в данной ситуации обойти ошибку

qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Ошибка сегментирования (core dumped)
И как правильно слинковать библиотеки libc

hetop
() автор топика

Решение:

$ cat test.cpp
#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
}
$ arm-none-eabi-g++ -mthumb -mcpu=cortex-m3 --specs=rdimon.specs -Wl,--start-group -lgcc -lc -lm -lrdimon -Wl,--end-group -o test test.cpp
$ qemu-arm -cpu cortex-m3 -s 160 ./test
Hello World!

hetop
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.