Могу ли я разблокировать «пройти»?

Обновление - см. Мой другой ответ ниже

Хорошо, после часов (буквально) и часов анализа файл Makefile, созданный сценарием configure для util-linux, и другой файл Makefile, созданный другой утилитой, которая в конечном итоге содержит статически связанные файлы, я успешно извлек параметры, переданные в arm-linux-gnueabi-gcc , которые создавать статически связанные файлы. В итоге я получил следующее:

arm-linux-gnueabi-gcc -ffloat-store -static -DHAVE_CONFIG_H -static  -D_U_="__attribute__((unused))" -o <name_of_your_file> <object files produced by the compiler separated by space>

Итак, после компиляции whereis :

make whereis

я провел поиск по всем созданным объектным файлам:

find . -name "*.o"

Я получил:

./misc-utils/whereis.o
./lib/libcommon_la-blkdev.o
./lib/libcommon_la-sysfs.o
./lib/libcommon_la-idcache.o
./lib/libcommon_la-procutils.o
./lib/libcommon_la-mbsalign.o
./lib/libcommon_la-linux_version.o
./lib/libcommon_la-env.o
./lib/libcommon_la-pager.o
./lib/libcommon_la-strutils.o
./lib/libcommon_la-mangle.o
./lib/libcommon_la-timeutils.o
./lib/libcommon_la-fileutils.o
./lib/libcommon_la-exec_shell.o
./lib/libcommon_la-match.o
./lib/libcommon_la-crc32.o
./lib/libcommon_la-md5.o
./lib/libcommon_la-randutils.o
./lib/libcommon_la-ttyutils.o
./lib/libcommon_la-cpuset.o
./lib/libcommon_la-color-names.o
./lib/libcommon_la-ismounted.o
./lib/libcommon_la-path.o
./lib/libcommon_la-canonicalize.o
./lib/libcommon_la-loopdev.o
./lib/libcommon_la-setproctitle.o
./lib/libcommon_la-strv.o

Итак, я объединил все эти объектные файлы в одну строку, и я выполнил другую команду:

arm-linux-gnueabi-gcc -ffloat-store -static -DHAVE_CONFIG_H -static  -D_U_="__attribute__((unused))" -o mywhereis ./misc-utils/whereis.o ./lib/libcommon_la-blkdev.o ./lib/libcommon_la-sysfs.o ./lib/libcommon_la-idcache.o ./lib/libcommon_la-procutils.o ./lib/libcommon_la-mbsalign.o ./lib/libcommon_la-linux_version.o ./lib/libcommon_la-env.o ./lib/libcommon_la-pager.o ./lib/libcommon_la-strutils.o ./lib/libcommon_la-mangle.o ./lib/libcommon_la-timeutils.o ./lib/libcommon_la-fileutils.o ./lib/libcommon_la-exec_shell.o ./lib/libcommon_la-match.o ./lib/libcommon_la-crc32.o ./lib/libcommon_la-md5.o ./lib/libcommon_la-randutils.o ./lib/libcommon_la-ttyutils.o ./lib/libcommon_la-cpuset.o ./lib/libcommon_la-color-names.o ./lib/libcommon_la-ismounted.o ./lib/libcommon_la-path.o ./lib/libcommon_la-canonicalize.o ./lib/libcommon_la-loopdev.o ./lib/libcommon_la-setproctitle.o ./lib/libcommon_la-strv.o

И вуаля! :) mywhereis сгенерирован.

Итак, я оказал честь, выполнив команду file:

mywhereis: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=a5b7c4ad147dc26ed211a7aa643f744a29e477f3, not stripped

Какое облегчение !! Хорошо, решение не идеальное , но оно выполняет свою работу и его можно оптимизировать!

В общей сложности я потратил около 8 часов, работая над этим и экспериментируя, и я понял, что может не быть «одного решения для всех», но это действительно работает! Я протестировал файл на своем телефоне Android, и он работает!

Кроме того, это решение представляет собой «одно решение для всех», поскольку оно просто связывает объектные файлы для создания статически связанного файла. Я тестировал это с помощью другой утилиты из совершенно другого исходного пакета, и она тоже сработала.

2
31.05.2016, 19:57
0 ответов

Теги

Похожие вопросы