Каково значение LDFLAGS
Я пытаюсь скомпилировать AODV для ARM Linux. Я использую SabreLite в качестве платы с версией ядра 3.0.35_4.1.0. Стоит отметить, что я использую openembedded для создания своего дистрибутива Linux для моей платы. Исходный код AODV ( http://sourceforge.net/projects/aodvuu/) содержит файл README, в котором приведены некоторые указания о том, как установить его на ARM, как указано ниже. ( http://w3.antd.nist.gov/wctg/aodv_kernel/kaodv_arm.html).
Я смог обновить make-файл, чтобы использовать его с версией ядра после 2.6 (как указано выше, у меня есть версия ядра 3.0.35_4.1.0). Итак, в основном я пытаюсь создать модуль (скажем, file.ko), а затем загрузить его в ARM (с помощью команды insmod file.ko).
Для этого я использую кросс-компилятор, некоторые значения которого указаны ниже:
echo $ CC: arm-oe-linux-gnueabi-gcc -march = armv7-a -mthumb-interwork -mfloat-abi = hard -mfpu = неон -mtune=cortex-a9 --sysroot=/usr/local/oecore-x86_64/sysroots/cortexa9hf-VFP-неон-ае-линукс-gnueabi
echo $ ARCH = arm
echo $ CFLAGS: O2 -pipe -g -feliminate-unused-debug-types
echo $ LD: arm-oe-linux-gnueabi-ld --sysroot = / usr / local / oecore-x86_64 / sysroots / cortexa9hf-vfp-neon-oe-linux-gnueabi
echo $ LDFLAGS: -Wl,-O1 -Wl,- hash-style=gnu -Wl,- по мере необходимости -Wl,- по мере необходимости
когда я запускаю команду "make", я получаю следующие ошибки:
LD [M] /home/scof/script_emulation/AODV/aodv-uu/lnx/kaodv.o
arm-oe-linux-gnueabi-ld: нераспознанная опция '-Wl,-O1'
arm-oe-linux-gnueabi-ld: используйте параметр --help для получения информации об использовании
В нем говорится, что с компоновщиком что-то не так. Этот компоновщик происходит из инструментов кросс-компиляции, и я обычно не должен его трогать
В любом случае, чтобы исправить вышеуказанные ошибки, я пытаюсь отозвать LDFLAGS следующим образом: export LDFLAGS = '', и после этого команда make работает, и я получаю модуль kaodv.ko. Но когда я вставляю его в ARM для проверки, он не работает. Это на самом деле заморозить мой терминал
Итак, мой вопрос, я должен указать LDFLAGS при компиляции? Может ли удаление LDFLAGS повлиять на сгенерированный модуль ядра? На самом деле, я пытаюсь понять, где может быть проблема, и единственное, что приходит ко мне, это то, что, возможно, мне не следует менять LDFLAGS вручную. Но если я не изменю де LDFLAGS, я получу ошибку нераспознанного параметра.
Мой второй вопрос, связанный с этим, каково значение LDFLAGS в компиляции ARM?
Спасибо!!
2 ответа
echo $LDFLAGS: -Wl,-O1 -Wl,- hash-style=gnu -Wl,- по мере необходимости -Wl, - по мере необходимости
Существует два распространенных метода вызова компоновщика в цепочке инструментов на основе GCC. Один - сделать это напрямую, а другой - использовать GCC в качестве внешнего интерфейса для вызова компоновщика, а не вызывать его напрямую. При этом опции, предназначенные для компоновщика, имеют префикс -Wl,
так что GCC знает, чтобы передать их, а не интерпретировать их сам.
В вашем случае сообщение об ошибке от самого LD
arm-oe-linux-gnueabi-ld: нераспознанная опция '-Wl,-O1'
Указывает, что ваша система сборки проходит LDFLAGS
непосредственно к компоновщику, а не через GCC.
Поэтому вы должны удалить -Wl,
префикс и ваши LDFLAGS вместо этого будет
-O1 --hash-style=gnu - как нужно - как нужно
(дублирование последнего аргумента, вероятно, бессмысленно, но мягко)
-O1
это опция, которая говорит компоновщику оптимизировать Я считаю, что это что-то новое, и ваш компоновщик может быть немного устаревшим. Попробуйте удалить -Wl,-O1
, это все еще должно работать.