LINUX.ORG.RU

Избирательно работающая программа


0

1

Здравствуйте!

Разрабатываю программу для робота под дистрибутив X-linux. На бортовом компьютере стоит процессор Vortex-SX86 с архитектурой x86.

Решил начать с чего-нибудь простого, вроде этого:


#include <stdio.h>
int main()
{
printf(«test»);
return 0;
}

g++ test.cpp -o test

Программа чудесным образом работает на моем компьютере под убунтой, но вызывает segmentation fault при запуске на бортовом компьютере. ldd test дает это:
Segmentation fault
Segmentation fault
ldd: /lib/ld-linux.so.2 $exited with unknown exit code (139)

Подскажите, пожалуйста, в чем может быть дело.


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

Библиотеки стандартные, скорее всего, бинарно несовместимы. При линковке под убунтой нужно использовать библиотеки среды назначения.

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

То есть, мне следует вынуть все библиотеки из среды назначения, сложить их в отдельную директорию и натравить на нее компилятор?

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

Ох, черт... как-то очень захотелось заменить этот дистрибутив чем-нибудь менее.. тайваньским. Ну дебианом, например. Проблема только в том, что непонятно, как запустить установку.

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

А разница? Там тоже либы другие будут. Если у тебя платформы одинаковые, то можешь пока просто статически скомпилировать бинарь.

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

Значит неправильно сделал, что я могу сказать. А архитектуры точно одинаковые? Ну там не 64 бита где-то?

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

Точно одинаковые, я специально плату подбирал с такой же архитектурой. А сделал вроде правильно - файл вырос в объеме в 100 раз, как и положено :) g++ test.cpp -o test -static-libgcc -static

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

А, нет, тоже x86

Попробовал такой вариант:
gcc test.c -o test -static

тот же результат

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

file test test: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, not stripped

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

советую юзать buildroot для таких вещей. оно и поновей все скачает, и тулчейн предоставит

VladimirMalyk ★★★★★
()

попробуй сначала что-нибудь попроще — например

.globl _start
_start:
mov $1, %eax
mov $42, %ebx
int $0x80
as test.s -o test.o
ld test.o -o test
./test
echo $? # должо быть 42

если и тут неудача, значит, скорее всего, с ld-linux.so на железке какая-то беда.

а вообще — зря на x86 брал, ей-богу сейчас с arm именно в смысле компиляции и то проще — скачал с codesourcery бинарник с gcc и друзьями и компили сколько хочешь.

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

А у меня есть еще одна плата, с arm как раз. Но там микропроцессор без memory management unit, и меня пугает потенциальное обилие танцев с бубном при установке.

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

ну отлично, теперь мы знаем, что хотя бы binutils работают.

можно двигаться дальше примерно в этом же направлении — скажем, теперь скомпилить (уже gcc)

[code]int main(){return 42;}[/code]

по смыслу, мы хотим найти проблемное место. наличие gdb на железке может помочь, а может и нет (дебажить проблемы в сишном рантайме не очень просто), поэтому я и предлагаю вместо этого итеративный метод.

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

486 не только MMX не поддерживает, но в общем-то в рантайме ничего особо новомодного использоваться не должно.

можно, конечно, попробовать сказать -march=i486.

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

Скомпилировал с gcc test.c -march=i486 -o test

Результат такой: segfault at b7f48688 ip такой-то bp такой-то error 6 in ld-linux.so.2

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

бубенту же вроде теперь под i686 собирают

anonymous
()

а g++ на x-linux поставить никак нельзя? потом прямо там и собирать...

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