относительно:
cris-gcc -g -static -nostdlib -o compiled main.c -luClibc-0.9.27 -L.
Компоновщик работает с библиотеками в том порядке, в котором они встречаются.Поэтому они должны быть перечислены в необходимом порядке.
Компоновщик должен знать, где находится библиотека, прежде чем узнавать, какую библиотеку проверять.Рекомендуется:
cris-gcc -g -static -nostdlib -o compiled main.c -L. -luClibc-0.9.27
Однако библиотека * .so НЕ является статической.Это динамическая библиотека, поэтому параметр: -static
следует удалить. Однако для этого требуется, чтобы динамическая библиотека была доступна во время выполнения, если связанная * .a (статическая библиотека) доступна, то ее следует использовать воператор compile / link.
Примечание: прототип функции: exit()
имеет свой 'прототип, представленный через файл заголовка stdlib.h
, а не файл заголовка unistd.h
.
относительно:
#include <unistd.h>
int main(int argc, char** argv)
{
*((unsigned int*)0) = 0xDEAD;
}
параметры: argc
и argv
не используются, поэтому компилятор выведет два предупреждения о «неиспользуемых параметрах».Предложите использовать сигнатуру функции: int main( void )
этот код пытается записать на адрес 0. Однако приложение не имеет «собственного» адреса 0 (обычно такой адрес будет «помечен» как«только для чтения», поэтому приложение будет завершено с «событием сбоя сегмента»)
Плохая практика программирования - включать заголовочные файлы, содержимое которых не используется.Предложите удалить оператор: #include <unistd.h>
этот оператор: int a = 0;
приведет к тому, что компилятор выведет предупреждающее сообщение о переменной, которая «установлена», но никогда не «используется»
относительно:
cris-gcc -g -static -nostdlib -o compiled main.c -L. -luClibc-0.9.27
При компиляции всегда следует включать предупреждения, а затем исправлять эти предупреждения.Предложить:
cris-gcc -Wall -Wextra -Wconversion -pedantic -std=c99 -g -static -nostdlib -o compiled main.c -luClibc-0.9.27 -L.