Я хочу заменить 'ld' на 'gcc' в моем Makefile, чтобы связать мои объекты ядра

Вы не ищете перестановки - вы хотите декартово произведение . Для этого используйте product из itertools:

from itertools import product
for roll in product([1, 2, 3, 4, 5, 6], repeat = 2):
    print(roll)

0
задан Ondrej K. 19 January 2019 в 16:09
поделиться

2 ответа

Предупреждение, опция -L позволяет указать путь для поиска библиотек, указать библиотеку, которую вы хотите связать с вами (также) необходимо использовать параметр -l

. чтобы добавить опции -lrpcmod -lnfs -lrpcsec -lklmmod -lzfs

Более подробно в GCC Linking Options

0
ответ дан bruno 19 January 2019 в 16:09
поделиться

По умолчанию компоновщик GNU, вызываемый через драйвер компилятора gcc, пытается создать стандартный исполняемый файл. Следовательно, если вы не укажете иное, ld будет использовать свой скрипт компоновщика по умолчанию, код запуска C и будет искать подпрограмму main() и все остальное, что делает допустимый исполняемый файл.

Я не слишком знаком с Solaris, но готов поспорить, что он не подойдет для сборки модулей ядра. Я ожидаю, что модулям ядра, по крайней мере, потребуются некоторые опции, такие как -ffreestanding, -nostdlibs и, скорее всего, скрипт компоновщика не по умолчанию, который, вероятно, сильно отличается от скрипта по умолчанию, используемого для приложений.

Даже если вам удастся связать ваши модули ядра таким образом, я серьезно сомневаюсь, что вы закончите. Инструментарий gcov, скорее всего, не ожидает, что он будет находиться в драйвере ядра, но ожидает надлежащей среды исполнения C (например, он будет, по крайней мере, ожидать fopen() файла, чтобы fwrite() его результаты). Драйвер ядра, однако, не имеет этого комфорта. Вы, вероятно, столкнетесь с проблемой, чтобы каким-то образом получить данные gcov из ваших модулей ядра.

Не сказать, что это не выполнимо, но это, безусловно, будет много работы.

0
ответ дан mfro 19 January 2019 в 16:09
поделиться
Другие вопросы по тегам:

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