По умолчанию компоновщик GNU, вызываемый через драйвер компилятора gcc
, попытается создать стандартный исполняемый файл. Следовательно, если вы не укажете иное, ld
будет использовать скрипт компоновщика по умолчанию, код запуска C и будет искать подпрограмму main()
и все остальное, что делает допустимый исполняемый файл.
Я не слишком знаком с Solaris, но готов поспорить, что он не подойдет для сборки модулей ядра. Я ожидаю, что модулям ядра по крайней мере потребуются некоторые параметры, такие как -ffreestanding
, -nostdlibs
и, скорее всего, скрипт компоновщика не по умолчанию, который, вероятно, сильно отличается от скрипта по умолчанию, используемого для приложений.
Даже если вам удастся связать свои модули ядра таким образом, я серьезно сомневаюсь, что вы закончите. Инструментальные подпрограммы gcov
, скорее всего, не ожидают, что они будут жить в драйвере ядра, но ожидают правильной среды выполнения C (например, по крайней мере она будет ожидать от fopen()
файла до fwrite()
своих результатов). Драйвер ядра, однако, не имеет этого комфорта. Вы, вероятно, столкнетесь с проблемой, чтобы каким-то образом получить данные gcov
из модулей ядра.
Не говорю, что это не выполнимо, но это, безусловно, будет много работы.