"undefined reference to" при линковке, что делать?

Я спокойно могу вызвать функцию, в пределах одной функции, но когда пытаюсь вызвать эту же функцию, в пределах другой, в этом же файле, линковщик кричит. Хотелось бы скинуть на русском или на английском но увы, у меня линковщик почему-то говорит на украинском)

Функция getMessage() определена в другом файле, этот файл компилю, после чего все складываю через ld.

( если кто будет смотреть исходники то
getMessage() - в файле task_controll.с
А все что я здесь показал в файле shell.с )

void test(void){
	// getMessage(); // Если здесь этого вызова нет, то все компилит нормально.
	return;
}

void shell(void)
{
	putLine(t1);
	while( 1 ){
		putChar('>');
		key = 0;
		i = 0;
		for( int i = 0; i < 255; i++ )
			buff[i] = 0;
		do{
			shellMessageLine = getMessage(); // Этот же вызов здесь работает вполне нормально.
...


Линковщик кричит это:
ld: Source/shell.o: у функції «test»:
shell.c:(.text+0x40): невизначене посилання «__stack_chk_fail_local»
ld: kernel: прихований символ «__stack_chk_fail_local» не визначено
ld: спроба остаточного компонування зазнала невдачі: помилкове значення


Вообше вся прога есть на гитхабе. Только там нету вызова из за которого все падает:
https://github.com/ASMcoder555/Neo-Operating-System
  • Вопрос задан
  • 632 просмотра
Решения вопроса 2
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
неопределенная ссылка __stack_chk_fail_local
скрытый символ __stack_chk_fail_local не определен
попытка окончательной компоновки потерпела неудачу: ошибочное значение
(переведено гуглом)

Где-то используется функция или внешняя переменная __stack_chk_fail_local, но ни в одном из обьектных файлов, переданных компоновщику данная функция/переменная не обнаружена
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Хотелось бы скинуть на русском или на английском но увы, у меня линковщик почему-то говорит на украинском

export LANG=C в консоли где выполняется линковка должен решить эту проблему.

невизначене посилання __stack_chk_fail_local

можно компилировать исходник на C с ключами -fno-stack-protector -fstack-check=no чтобы компилятор не вставлял проверки и вызовы этой функции. См.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы