Я использую свой компьютер Ubuntu 14.10 x64 для кросс-компиляции, чтобы запустить мои программы на моем Beaglebone Black, но я получаю странную ошибку, когда пытаюсь запустить скомпилированную программу на моем BBB.
В командной строке ниже показано, как я делаю все шаги:
ПК: написание кода → компиляция с arm-linux-gnueabi-gcc
→ передача в BBB через sftp
cleber@cleber:~/test1$ nano ./test1/test1.c
cleber@cleber:~/test1$ more test1.c
#include "stdio.h"
int main(void) {
printf("Hello world !\n");
return 0;
}
cleber@cleber:~/test1$ arm-linux-gnueabi-gcc test1.c -o test1
cleber@cleber:~/test1$ file test1
test1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ee8c02a051254b2acb7b9054e4599a495da26415, not stripped
cleber@cleber:~/test1$ sftp debian@192.168.7.2
debian@192.168.7.2's password:
Connected to 192.168.7.2.
sftp> put /home/cleber/test1/* /home/debian/test1
Uploading /home/cleber/test1/test1 to /home/debian/test1/test1
/home/cleber/test1/test1 100% 8416 8.2KB/s 00:00
Uploading /home/cleber/test1/test1.c to /home/debian/test1/test1.c
/home/cleber/test1/test1.c 100% 81 0.1KB/s 00:00
sftp> exit
Beaglebone / через SSH: (работает полученный скомпилированный код)
debian@beaglebone:~/test1# chmod +x test1
debian@beaglebone:~/test1$ ls -la
total 32
drwxr-xr-x 2 debian debian 4096 Mar 2 01:13 .
drwxr-xr-x 13 debian debian 4096 Mar 2 01:08 ..
-rwxr-xr-x 1 debian debian 8416 Mar 2 01:11 test1
-rw-r--r-- 1 debian debian 81 Mar 2 01:11 test1.c
debian@beaglebone:~/test1$ ./test1
-bash: ./test1: No such file or directory
Но когда я компилирую в BBB, works:
debian@beaglebone:~/test1$ gcc test1.c -o test12
debiandebian@beaglebone:~/test1$ ls -la
total 32
drwxr-xr-x 2 debian debian 4096 Mar 2 01:30 .
drwxr-xr-x 13 debian debian 4096 Mar 2 01:08 ..
-rwxr-xr-x 1 debian debian 8416 Mar 2 01:11 test1
-rw-r--r-- 1 debian debian 81 Mar 2 01:11 test1.c
-rwxr-xr-x 1 debian debian 5048 Mar 2 01:30 test12
debian@beaglebone:~/test1$ ./test12
Hello world !
debian@beaglebone:~/Desktop/test1$ file test1 test12
test1: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xa0028cee2a4b255154907bcb499a59e41564a25d, not stripped
test12: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x6a05d95c39cc59d2d407655778dc2ef6f53f02cd, not stripped
debian@beaglebone:~/Desktop/test1$ ldd test1 test12
test1:
not a dynamic executable
test12:
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e1e000)
/lib/ld-linux-armhf.so.3 (0xb6f15000)
Может ли эта проблема быть вызвана тем, что используется x64-арка для кросс-компиляции 32-битного исполняемого файла? Я установил некоторые библиотеки 32bit, но я не уверен, правильно ли я это сделал. Я даже не знаю, является ли это правильной причиной проблемы.
Может быть, эта информация ниже полезна:
ПК:
cleber@cleber:~/test1$ cat /etc/issue.net; uname -ar
Ubuntu 14.10
Linux cleber 3.16.0-44-generic #59-Ubuntu SMP Tue Jul 7 02:07:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
ВВВ:
cat /etc/issue.net; uname -ar
Linux beaglebone 3.8.13-bone70 #1 SMP Fri Jan 23 02:15:42 UTC 2015 armv7l GNU/Linux
Я новичок в Linux и застрял в этот шаг и, к сожалению, мне действительно нужно решить его довольно быстро: '(Я надеюсь получить помощь здесь!
Tks в продвинутом!
Решение:
Просто компилируют код статически:
пк:
cleber@cleber:~/test1$ arm-linux-gnueabi-gcc -static test1.c -o test1
cleber@cleber:~/test1$ sftp debian@192.168.7.2
debian@192.168.7.2's password:
Connected to 192.168.7.2.
sftp> put /home/cleber/test1/* /home/debian/test1
Uploading /home/cleber/test1/test1 to /home/debian/test1/test1
/home/cleber/test1/test1 100% 8416 8.2KB/s 00:00
Uploading /home/cleber/test1/test1.c to /home/debian/test1/test1.c
/home/cleber/test1/test1.c 100% 81 0.1KB/s 00:00
sftp> exit
BBB:
debian@beaglebone:~/test1$ ./test1
Hello world !
, Как Вы видите, крест скомпилировал исполняемый файл test1
, статично: test12
был скомпилирован gcc на BBB только для сравнения.
debian@beaglebone:~/Desktop/test1$ ldd test1 test12
test1:
not a dynamic executable
test12:
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e12000)
/lib/ld-linux-armhf.so.3 (0xb6f09000)
debian@beaglebone:~/Desktop/test1$ file test1 test12
test1: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=0x8d34ee7f6f2798fa153dea185f77443d06b6ab61, not stripped
test12: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x6a05d95c39cc59d2d407655778dc2ef6f53f02cd, not stripped
Благодарен за то, что все помогают!
У меня Была точно та же проблема, таким образом, я сделал следующий
, sudo Кв. - получает установку g ++-arm-linux-gnueabihf
, sudo Кв. - получает gcc-arm-linux-gnueabihf
установки После этого, я настраиваю свои инструменты компиляции в затмении для указания на вышеупомянутый установленный каталог и соответствовал программа
После компиляции, я копирую исполняемый файл в c версии жженой кости гончей и выполняемый там через командную строку, и это начало работать :)