LINUX.ORG.RU

Тестовая программа на С++ использует iostream вывод на stdout «ILL»

 


0

1

Нарисовал набор скриптов кросс-сборки emLinux.

По какой-то неясной причине обычная тестовая программа https://github.com/ponyatov/azlin/raw/math/user/cpptest.cpp

при запуске выводит на stdout строку «ILL»

Никаких ошибок в скриптах сборки кросс-компилера и uclibc на нашел, обычный Си-компилятор работает без вопросов, отключение ключей оптимизации дает тот же результат.

Может кто сталкивался с такой проблемой ?

ветка https://github.com/ponyatov/azlin/tree/math

Ответ на: комментарий от anonymous

От содержимого строк не зависит, обычный «Hell of Word» тоже тем же ILL выводится.

Подозрение что какие-то конструкторы, связанные с iostream, криво отрабатывают

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

От содержимого строк не зависит, обычный «Hell of Word» тоже тем же ILL выводится.

вы бинарник переименовываете в «Hell of Word» и запускаете ??

hint: argv[0] - имя программы, argv[1] первый аргумент и т.д.

MKuznetsov ★★★★★
()

при запуске выводит на stdout строку «ILL»

А что должно было по вашему туда вывестись?

andreyu ★★★★★
()

Он выводит имя твоего исполняемого файла. Так и должно быть. Вот почему у тебя такое странное имя исполняемого файла - вопрос.

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

имя исполняемого файла /usr/bin/cpptest

менял: исходник, с перекомпиляцией, c -static и без, пытался выводить числа, строковые константы (static char[]), argv[0],..

тот же код с компиляцией в рабочей системе естественно отрабатывает как надо

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

Мало данных для анализа. Можешь набросать небольшой полный пример?

anonymous
()
Ответ на: комментарий от ponyatov

может быть, попробую пересобрать с mcpu=i486sx

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

что выводит?

cat <<EOF > ponyatov.cpp
#include <iostream>
int main(int argc, char **argv) {
    std::cout << argv[0] << std::endl;
}
EOF
g++ ponyatov.cpp -o ponyatov
./ponyatov
mix_mix ★★★★★
()
Ответ на: что выводит? от mix_mix

на билд-системе:

ponyatov@gac:/tmp$ ./ponyatov ./ponyatov

на таргете (под qemu):

ponyatov@gac:~/azlin$ pc686math.cross/bin/i686-linux-uclibc-g++ -o pc686math/usr/bin/ponyatov ponyatov.cpp ponyatov@gac:~/azlin$ make root emu # /usr/bin/ponyatov ILL

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

на билд-системе:

ponyatov@gac:/tmp$ ./ponyatov 
./ponyatov

на таргете (под qemu):

ponyatov@gac:~/azlin$ pc686math.cross/bin/i686-linux-uclibc-g++ -o pc686math/usr/bin/ponyatov ponyatov.cpp
ponyatov@gac:~/azlin$ make root emu

# /usr/bin/ponyatov
ILL
ponyatov
() автор топика
Ответ на: комментарий от ponyatov

нифига непонятно, кто выводит, когда выводит, куда выводит..

вы уверены что «pc686math/usr/bin/ponyatov» и «/usr/bin/ponyatov» это одно и то-же??

вы уверены что пресловутый ILL выведен в stdout?

вы уверены что «ILL» это результат работы программы, а не отплёвка elf-интерпретатора/линковщика ??

MKuznetsov ★★★★★
()

возможно это SIGILL - неизвестная процессору инструкция

Harald ★★★★★
()
Ответ на: комментарий от anonymous

в смысле выслать бинарник ? могу сразу kernel+initrd двумя файлами отдать. или в .iso загрузочном

Попробовал пересобрать под i486, дело не в типе процессора. Видимо придется разбираться с remote отладкой, включать ее в сборке и трассировать через отладчик.

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

Проблема локализована: ошибка в опциях оптимизации при сборке кросс-компилятора, CFLAGS vs CFLAGS_FOR_BUILD, всем спасибо.

ЗЫ: но у удаленной отладкой стоит глубоко разобраться, все равно нужна будет

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

Неправильно выставлялась переменная CFLAGS_FOR_TARGET, в результате stdlibc++ компилилась с флагами для хост-системы, соответственно SIGILL из-за команд core2 в коде для i486/i686. Можно было попробовать запустить на реальном железе, думаю в этом случае программа бы нормально отрабатывала.

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

только в мусульманских юниксах есть SIGILL. иншаллах-таки

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