Temat: Kompilacja własnego programu na OpenWRT
Witam,
temat zapewne wałkowany niejednokrotnie ale nie mogę znaleźć odpowiedzi rozwiązującej mój problem. Programuję sobie w Pythonie, niestety skrypty pythona w openwrt działają jakby chciały, a nie mogły
. Postanowiłem więc użyć cythona aby przekonwertować kod do C, a następnie za pomocą SDK skompilować go pod OpenWRT, żeby zwiększyć wydajność. Używam rb532a. Ściągnąłem SDK pod tę platformę. Wykonałem:
export STAGING_DIR=/home/parallels/openwrt-sdk-18.06.2-rb532_gcc-7.3.0_musl.Linux-x86_64/staging_dir
export PATH=/home/parallels/openwrt-sdk-18.06.2-rb532_gcc-7.3.0_musl.Linux-x86_64/staging_dir/toolchain-mipsel_mips32_gcc-7.3.0_musl/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
feeds update -a
feeds install -aPo takim zabiegu jestem w stanie uruchomić kompilator z poziomu dowolnego katalogu. Toolchain nie zawierał plików nagłówkowych do pythona. Ściągnąłem paczkę python3-dev_3.6.5-1_mipsel_mips32.ipk i przy pomocy polecenia tar ją rozpakowałem, a następnie rozpakowałem data.tar.gz. Utworzone katalogi i pliki po wypakowaniu dołączam w parametrach kompilatora. Polecenie jakim kompiluje:
mipsel-openwrt-linux-gcc -Os -I ~/usr/include/python3.6 -L ~/usr/lib -o main main.c -lpython3.6 -lpthread -lm -lutil -ldlEfektem czego jest:
/home/parallels/openwrt-sdk-18.06.2-rb532_gcc-7.3.0_musl.Linux-x86_64/staging_dir/toolchain-mipsel_mips32_gcc-7.3.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.3.0/../../../../mipsel-openwrt-linux-musl/bin/ld: warning: libz.so.1, needed by /home/parallels/usr/lib/libpython3.6.so, not found (try using -rpath or -rpath-link)
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflateEnd'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `inflate'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `inflateInit2_'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `zlibVersion'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflateCopy'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflateInit_'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflate'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `adler32'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `inflateSetDictionary'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflateSetDictionary'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `inflateEnd'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `crc32'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `deflateInit2_'
/home/parallels/usr/lib/libpython3.6.so: undefined reference to `inflateCopy@ZLIB_1.2.0'
collect2: error: ld returned 1 exit statusZ tego co widzę libpython3.6.so wymaga libz.so.1. Ściągnąłem więc paczkę zlib_1.2.11-2_mipsel_mips32.ipk i po wypakowaniu znajdowała się w katalogu razem z libpython3.6.so (więc uwzględniona w parametrach kompilatora). Niestety mimo, że biblioteka znajduje się w ~/usr/lib to kompilator dalej jej nie widzi i wyświetla taki sam komunikat. Przeszukałem wczoraj sporo internetu, niestety nie znalazłem nic co mogłoby rozwiązać ten problem
. Nie wykluczam (a raczej zdaję sobie sprawę), że robię coś źle, tylko już nie mam pomysłu dlaczego ld nie znajduje tej biblioteki. Odkryłem też coś takiego:
#file libz.so.1.2.11
libz.so.1.2.11: ELF 32-bit LSB shared object, MIPS, MIPS32 version 1 (SYSV), dynamically linked, corrupted section header sizeCzy "corrupted section header size" może powodować ten błąd?
Proszę o jakieś nakierowanie ![]()
Z góry dzięki,
Tomek
PS. Pracuje na Debianie 9.6