Не работает функция sqrt в языке С

Рейтинг: 1Ответов: 1Опубликовано: 28.02.2023

Не могу понять почему функция sqrt не работает. Заголовок math.h подключён. Интересно то, что функция работает, если её аргумент не переменная, а просто число. Например:

Так не работает:

double question = 45.35;
double answer = sqrt( question);

Выдаёт ошибку:

main.c:(.text+0x567): неопределённая ссылка на «sqrt»
collect2: error: ld returned 1 exit status

А так работает:

double answer = sqrt(45.35);

Кто-нибудь знает в чём дело?

Ответы

▲ 1

Спасибо тем, кто прокомментировал мой вопрос. Из комментариев я узнал, что нужно добавить опцию -lm в линковщике. В Code Blocks это можно сделать так: Settings -> Compiler -> Linker Settings -> Other linker options: в этом поле написать -lm и нажать OK. введите сюда описание изображения

На форуме JetBrains нашёл как включить опцию -lm для Clion, делюсь ссылкой https://intellij-support.jetbrains.com/hc/en-us/community/posts/206607085-CLion-Enabling-math-h-for-C-projects

Так выглядел мой файл CmakeList до добавления опции:

cmake_minimum_required(VERSION 3.24)
project(untitled1 C)

set(CMAKE_C_STANDARD 17)

add_executable(untitled1 main.c)

И после:

cmake_minimum_required(VERSION 3.24)
project(untitled1 C)

set(CMAKE_C_STANDARD 17)

add_executable(untitled1 main.c)
target_link_libraries(untitled1 m)

Извиняюсь за возможную избыточность, но я сам долго не понимал, куда эту опцию нужно было написать, если использовать IDE с встроенным сборщиком.