Каково значение 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, это все еще должно работать.

Другие вопросы по тегам