Проблема с библиотекой math.h в geany
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод
inxi -Fxz
в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Geany не видит библиотеку math.h, соответственно, компилятор воспринимает все математические функции как ошибки. Как подключить библиотеку?
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Гуглил, однако, но все советы сводятся к добавлению -lm к команде компиляции в терминале. Но мне то надо что-то с geany сделать. Библиотеку поставил:
sudo apt-get install libm. a
но это не помогло.
sudo apt-get install libm. a
но это не помогло.
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Проблема с библиотекой math.h в geany
Dimmension, может покажешь свой исходник, а то тут нет экстрасенсов чтоб угадывать что и как ты подключаешь
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Простите, не понял, исходник чего - текст программы, которую не могу скомпилировать?
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Проблема с библиотекой math.h в geany
ДаDimmension писал(а): ↑19 дек 2020, 16:22Простите, не понял, исходник чего - текст программы, которую не могу скомпилировать?
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double pi=3.141592653589;
double A2, A3, A4, A5, A6, A7, A8, A9, A10;
double eps, r0;
int N;
double a31=0.075, a32=0.225,
a41=44.0/45.0, a42=-56.0/15.0, a43=32.0/9.0,
a51=19372.0/6561.0, a52=-25360.0/2187.0, a53=64448.0/6561.0, a54=-212.0/729.0,
a61=9017.0/3168.0, a62=-355.0/33.0, a63=46732.0/5247.0, a64=49.0/176.0, a65=-5103.0/18656.0,
a71=35.0/384.0, a73=500.0/1113.0, a74=125.0/192.0, a75=-2187.0/6784.0, a76=11.0/84.0;
double b21=5179.0/57600.0, b23=7571.0/16695.0, b24=0.6140625, b25=-92097.0/339200.0, b26=187.0/2100.0, b27=0.025;
/* Dorman-Prince algorithm */
double DoPrin(double t0, double tf, double dx0, double dz0, double x0, double z0, double a, double q, double ph0){
FILE *fp; //creating file for writing data
if((fp=fopen("Quad_traect_2.7.dat", "w"))==NULL)
{
perror("Quad_traect_2.7.dat");
return 1;
}
double t; // running time
double x; // 1-st variable
double y; // 2-d variable
double dx; // 3-rd variable
double dy; // 4-th variable
double dx1, dx2, dy1, dy2, x1, x2, y1, y2;
float R1, R2, R3, R4, al0, al1, al2, al3, al4;
double dFx3, dFy3, dFx4, dFy4, dFx5, dFy5, dFx6, dFy6, dFx7, dFy7, dFx8, dFy8, dFx9, dFy9, dFx10, dFy10;
double wwx, wwy;
double F01, F21, F31, F41, F51, F61, F71;
double F02, F22, F32, F42, F52, F62, F72;
double F03, F23, F33, F43, F53, F63, F73;
double F04, F24, F34, F44, F54, F64, F74;
double Nt=tf*pi; //finish time
int n=1; // step calculator
float h=0.1; // initial step
x=x0; x1=x0; x2=x0;
y=z0; y1=z0; y2=z0;
dx=dx0; dx1=dx0; dx2=dx0;
dy=dz0; dy1=dz0; dy2=dz0;
t=t0;
N=1;
printf("t= %lf x= %lf y= %lf step= %lf\n",t/pi,x,y,h);
fprintf(fp, "%lf %lf %lf\n",t/pi,x,y);
while(t<=Nt)
{
int k=0;
/* derivatives for spatial harmonics */
dFx3=3*x*x-3*y*y;
dFy3=-6*x*y;
dFx4=4*pow(x,3)-12*x*y*y;
dFy4=-12*x*x*y+4*pow(y,3);
dFx5=5*pow(x,4)-30*x*x*y*y+5*pow(y,4);
dFy5=-20*pow(x,3)*y+20*x*pow(y,3);
dFx6=6*pow(x,5)-60*pow(x,3)*y*y*+30*x*pow(y,4);
dFy6=-30*pow(x,4)*y+60*x*x*pow(y,3)-6*pow(y,5);
dFx7=7*pow(x,6)-105*pow(x,4)*y*y+105*x*x*pow(y,4)-7*pow(y,6);
dFy7=-42*pow(x,5)*y+140*pow(x,3)*pow(y,3)-42*x*pow(y,5);
dFx8=8*pow(x,7)-168*pow(x,5)*y*y+280*pow(x,3)*pow(y,4)-56*x*pow(y,6);
dFy8=-56*pow(x,6)*y+280*pow(x,4)*pow(y,3)-168*x*x*pow(y,5)+8*pow(y,7);
dFx9=9*pow(x,8)-252*pow(x,6)*y*y+630*pow(x,4)*pow(y,4)-252*x*x*pow(y,6)+9*pow(y,8);
dFy9=-72*pow(x,7)*y+504*pow(x,5)*pow(y,3)-504*pow(x,3)*pow(y,5)+72*x*pow(y,7);
dFx10=10*pow(x,9)-360*pow(x,7)*y*y+1260*pow(x,5)*pow(y,4)-840*pow(x,3)*pow(y,6)+90*x*pow(y,8);
dFy10=-90*pow(x,8)*y+840*pow(x,6)*pow(y,3)-1260*pow(x,4)*pow(y,5)+360*x*x*pow(y,7)-10*pow(y,9);
wwx=A3*dFx3/A2+A4*dFx4/(A2*A2)+A5*dFx5/pow(A2,3)+A6*dFx6/pow(A2,4)+A7*dFx7/pow(A2,5)+A8*dFx8/pow(A2,6)+A9*dFx9/pow(A2,7)+A10*dFx10/pow(A2,8);
wwy=A3*dFy3/A2+A4*dFy4/(A2*A2)+A5*dFy5/pow(A2,3)+A6*dFy6/pow(A2,4)+A7*dFy7/pow(A2,5)+A8*dFy8/pow(A2,6)+A9*dFy9/pow(A2,7)+A10*dFy10/pow(A2,8);
la1:
if(k>10) goto la2;
F01=-(a+2*q*cos(2*(t-ph0)))*(x+0.5*wwx); //integrated function 1
F02=(a+2*q*cos(2*(t-ph0)))*(y-0.5*wwy); //integrated function 2
F03=dx; //integrated function 3
F04=dy; //integrated function 4
F21=-(a+2*q*cos(2*(t+h/5.0-ph0)))*(x+h*F03/5.0+0.5*wwx);
F22=(a+2*q*cos(2*(t+h/5.0-ph0)))*(y+h*F04/5.0-0.5*wwy);
F23=dx+h*F01/5.0;
F24=dy+h*F02/5.0;
F31=-(a+2*q*cos(2*(t+0.3*h-ph0)))*(x+h*(a31*F03+a32*F23)+0.5*wwx);
F32=(a+2*q*cos(2*(t+0.3*h-ph0)))*(y+h*(a31*F04+a32*F24)-0.5*wwy);
F33=dx+h*(a31*F01+a32*F21);
F34=dy+h*(a31*F02+a32*F22);
F41=-(a+2*q*cos(2*(t+0.8*h-ph0)))*(x+h*(a41*F03+a42*F23+a43*F33)+0.5*wwx);
F42=(a+2*q*cos(2*(t+0.8*h-ph0)))*(y+h*(a41*F04+a42*F24+a43*F34)-0.5*wwy);
F43=dx+h*(a41*F01+a42*F21+a43*F31);
F44=dy+h*(a41*F02+a42*F22+a43*F32);
F51=-(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(x+h*(a51*F03+a52*F23+a53*F33+a54*F43)+0.5*wwx);
F52=(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(y+h*(a51*F04+a52*F24+a53*F34+a54*F44)-0.5*wwy);
F53=dx+h*(a51*F01+a52*F21+a53*F31+a54*F41);
F54=dy+h*(a51*F02+a52*F22+a53*F32+a54*F42);
F61=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a61*F03+a62*F23+a63*F33+a64*F43+a65*F53)+0.5*wwx);
F62=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a61*F04+a62*F24+a63*F34+a64*F44+a65*F54)-0.5*wwy);
F63=dx+h*(a61*F01+a62*F21+a63*F31+a64*F41+a65*F51);
F64=dy+h*(a61*F02+a62*F22+a63*F32+a64*F42+a65*F52);
F71=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63)+0.5*wwx);
F72=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64)-0.5*wwy);
F73=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
F74=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);
dx1=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
dx2=dx+h*(b21*F01+b23*F31+b24*F41+b25*F51+b26*F61+b27*F71);
dy1=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);
dy2=dy+h*(b21*F02+b23*F32+b24*F42+b25*F52+b26*F62+b27*F72);
x1=x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63);
x2=x+h*(b21*F03+b23*F33+b24*F43+b25*F53+b26*F63+b27*F73);
y1=y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64);
y2=y+h*(b21*F04+b23*F34+b24*F44+b25*F54+b26*F64+b27*F74);
R1=fabs(dx2-dx1);
R2=fabs(dy2-dy1);
R3=fabs(x2-x1);
R4=fabs(y2-y1);
if(R1>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R2>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R3>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R4>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R1<eps/64.0)
if(R2<eps/64)
if(R3<eps/64)
if(R4<eps/64) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmax(fmax(al1,al2),fmax(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
if(sqrt(x2*x2+y2*y2)>r0)
break;
la2:
x=x2;
y=y2;
dx=dx2;
dy=dy2;
t=(float)t+h;
n++;
printf("t= %lf x= %lf y= %lf h= %lf\n",t/pi,x,y,h);
fprintf(fp, "%lf %lf %lf\n",t/pi,x,y);
}
if (t<Nt) N=0;
if (t>2*Nt) N=0;
printf("n= %d N= %d\n",n,N);
return N;
}
/* Main program */
int main(){
/* multipole amplitudes */
A2=1.0;
A3=0.0;
A4=0.0;
A5=0.0;
A6=0.0;
A7=0.0;
A8=0.0;
A9=0.0;
A10=0.0;
double t0=0.0; //initial time
double tf=50.0; //finish time in periods HF field
double x0=0.5; //initial value of x-coordinate
double z0=0.5; //initial value y-coordinate
double dx0=0.0; //initial value x-projection of velocity
double dz0=0.0; //initial value y-projection of velocity
double ph0=0.0*pi; //initial phase
eps=1.0E-6; //accuracy
r0=1.14; //radius of field
double q=0.7; //q-parameter
double a=0.224; //a-parameter
DoPrin(t0, tf, dx0, dz0, x0, z0, a, q, ph0);
return 0;
}
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Таки да, но все форматирование почему то исчезло, когда сюда вставил.
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
-
- Сообщения: 5934
- Зарегистрирован: 16 дек 2017, 21:59
- Решено: 37
- Откуда: Феодосия
- Благодарил (а): 32 раза
- Поблагодарили: 750 раз
- Контактная информация:
-
- Сообщения: 2018
- Зарегистрирован: 11 июн 2017, 21:47
- Решено: 30
- Откуда: BY
- Благодарил (а): 79 раз
- Поблагодарили: 434 раза
- Контактная информация:
Проблема с библиотекой math.h в geany
Не сказал бы, что из предложенной вам ссылки http://pogugli.com/?360237 это предлагают все советы. Мне, например, бросилось в глаза ещё 2 совета (спойлер). Я не профи, но м.б. наведёт на мысли.Dimmension писал(а): ↑19 дек 2020, 06:26но все советы сводятся к добавлению -lm к команде компиляции в терминале
1. geany должен знать, где искать правильный список символов, и поэтому он читает источники всех открытых файлов, поэтому, если вам нужен полезный список символов, вы должны открыть все необходимые вам файлы заголовков перед началом программирования. Даже если geany хочет автоматически искать в заголовочных файлах, которые вы включаете, он не сможет угадать, какую версию gtk вы хотите использовать для вашего проекта (gtk2, gtk3, ...)..
2. Дело в том, что "math.h" — это имя, в том числе, файла из стандартной библиотеки. Поэтому, когда ты пишешь имя без пути, компилятор ищет его
1) в каталоге файла, который его включает
2) по путям, указанным в переменной окружения INCLUDE (а также в настройках Студии, если компилить в ней, а не в командной строке)
3) по путям, указанным в опциях компилятора
Значит, включать его можно с относительным путём #include "../Math/math.h"
2. Дело в том, что "math.h" — это имя, в том числе, файла из стандартной библиотеки. Поэтому, когда ты пишешь имя без пути, компилятор ищет его
1) в каталоге файла, который его включает
2) по путям, указанным в переменной окружения INCLUDE (а также в настройках Студии, если компилить в ней, а не в командной строке)
3) по путям, указанным в опциях компилятора
Значит, включать его можно с относительным путём #include "../Math/math.h"
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Проблема с библиотекой math.h в geany
Dimmension, у меня норм компиляет
Зайди в настройки Geany и пропиши там этот ключ для компиляции своего проекта
Код: Выделить всё
gcc qwe.cpp -lm -o qwe
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Не могу сказать точно, но очень похоже.и вот прямо это поставилось?
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
Я тоже не профи, и просто не понял, что нужно делать.Я не профи, но м.б. наведёт на мысли.
-
- Сообщения: 10044
- Зарегистрирован: 27 июн 2017, 13:36
- Решено: 129
- Откуда: Нижний Тагил
- Благодарил (а): 776 раз
- Поблагодарили: 1958 раз
- Контактная информация:
Проблема с библиотекой math.h в geany
Dimmension, вот скажи мне ты хочешь научиться чему-то или как? Тебе сказано что надо сделать. Уж, будь добр, потрать время разобраться как это сделать. Тут не платная тех. поддержка чтоб давать тебе готовый ответ.
-
- Сообщения: 45
- Зарегистрирован: 19 дек 2020, 17:45
- Благодарил (а): 24 раза
- Поблагодарили: 1 раз
- Контактная информация:
Проблема с библиотекой math.h в geany
Запустите Geany и откройте нужный Вам проект, в котором компилятор не находит math.h .
Выбрать в меню : Сборка - Установить команды сборки .
Откроется окно "Свойства проекта". В этом окне в таблице "Команды для языка: С"
в строке "Build" нужно дописать к gcc -Wall -o "%e" "%f" дополнительно через пробел -lm .
Выглядеть будет так : gcc -Wall -o "%e" "%f" -lm
И всё будет работать.
Пояснение можете найти в книге Стивена Пратта "Язык программирования C. Лекции и упражнения, 6-е издание.pdf"
в 16-ой главе на странице 695(в параграфе "Немного тригонометрии") :
Если в процессе компиляции будет выдано сообщение, такое как
Undefined: _sqrt /* sqrt() -- это одна из математических функций */
Не определено: _sqrt
или
'sqrt': unresolved external
'sqrt': нераспознанный внешний идентификатор
либо нечто подобное, значит, компилятор-компоновщик не смог найти библиотеку ма-
тематических функций. В системах Unix может потребоваться указать компоновщику
на необходимость поиска библиотеки математических функций с помощью флага - lm:
сс rect_pol.c - lm
Обратите внимание, что флаг - lm находится в конце команды. Причина в том,
что компоновщик вступает в игру после того, как компилятор скомпилирует файл С.
Компилятор GCC в системе Linux может вести себя в такой же манере:
gcc rect_pol.c -lm
Выбрать в меню : Сборка - Установить команды сборки .
Откроется окно "Свойства проекта". В этом окне в таблице "Команды для языка: С"
в строке "Build" нужно дописать к gcc -Wall -o "%e" "%f" дополнительно через пробел -lm .
Выглядеть будет так : gcc -Wall -o "%e" "%f" -lm
И всё будет работать.
Пояснение можете найти в книге Стивена Пратта "Язык программирования C. Лекции и упражнения, 6-е издание.pdf"
в 16-ой главе на странице 695(в параграфе "Немного тригонометрии") :
Если в процессе компиляции будет выдано сообщение, такое как
Undefined: _sqrt /* sqrt() -- это одна из математических функций */
Не определено: _sqrt
или
'sqrt': unresolved external
'sqrt': нераспознанный внешний идентификатор
либо нечто подобное, значит, компилятор-компоновщик не смог найти библиотеку ма-
тематических функций. В системах Unix может потребоваться указать компоновщику
на необходимость поиска библиотеки математических функций с помощью флага - lm:
сс rect_pol.c - lm
Обратите внимание, что флаг - lm находится в конце команды. Причина в том,
что компоновщик вступает в игру после того, как компилятор скомпилирует файл С.
Компилятор GCC в системе Linux может вести себя в такой же манере:
gcc rect_pol.c -lm
-
Автор темы - Сообщения: 17
- Зарегистрирован: 18 дек 2020, 21:41
- Контактная информация:
Проблема с библиотекой math.h в geany
rogoznik, спасибо большое за подробный и информативный ответ, без твоего совета я даже не знаю, как жил бы дальше.
Всем остальным участникам обсуждения - просто спасибо, и это вполне искренне.
Всем остальным участникам обсуждения - просто спасибо, и это вполне искренне.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей