llama.cpp icon indicating copy to clipboard operation
llama.cpp copied to clipboard

error: 'CLOCK_MONOTONIC' undeclared

Open lgehr opened this issue 3 years ago • 5 comments

The initial make fails with CLOCK_MONOTONIC undeclared

I llama.cpp build info: 
I UNAME_S:  Linux
I UNAME_P:  unknown
I UNAME_M:  x86_64
I CFLAGS:   -I.              -O3 -DNDEBUG -std=c11   -fPIC -pthread -mavx -mavx2 -mfma -mf16c -msse3
I CXXFLAGS: -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread
I LDFLAGS:  
I CC:       cc (Alpine 12.2.1_git20220924-r9) 12.2.1 20220924
I CXX:      g++ (Alpine 12.2.1_git20220924-r9) 12.2.1 20220924

cc  -I.              -O3 -DNDEBUG -std=c11   -fPIC -pthread -mavx -mavx2 -mfma -mf16c -msse3   -c ggml.c -o ggml.o
ggml.c: In function 'ggml_time_ms':
ggml.c:309:5: warning: implicit declaration of function 'clock_gettime' [-Wimplicit-function-declaration]
  309 |     clock_gettime(CLOCK_MONOTONIC, &ts);
      |     ^~~~~~~~~~~~~
ggml.c:309:19: error: 'CLOCK_MONOTONIC' undeclared (first use in this function)
  309 |     clock_gettime(CLOCK_MONOTONIC, &ts);
      |                   ^~~~~~~~~~~~~~~
ggml.c:309:19: note: each undeclared identifier is reported only once for each function it appears in
ggml.c: In function 'ggml_time_us':
ggml.c:315:19: error: 'CLOCK_MONOTONIC' undeclared (first use in this function)
  315 |     clock_gettime(CLOCK_MONOTONIC, &ts);
      |                   ^~~~~~~~~~~~~~~
make: *** [Makefile:182: ggml.o] Error 1

This can be solved by adding -D_POSIX_C_SOURCE=199309L to the C{,XX}FLAGS in the Makefile. See this Stackoverflow question: https://stackoverflow.com/questions/29666937/error-clock-monotonic-undeclared-first-use-in-this-function

lgehr avatar Mar 12 '23 17:03 lgehr

same question

(base) lizheng@lizheng-System-Product-Name:/home/ytkj/root1/liuxiao/LLM/llama.cpp$ make
I llama.cpp build info: 
I UNAME_S:  Linux
I UNAME_P:  x86_64
I UNAME_M:  x86_64
I CFLAGS:   -I.              -O3 -DNDEBUG -std=c11   -fPIC -pthread -mavx -mavx2 -mfma -mf16c -msse3
I CXXFLAGS: -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread
I LDFLAGS:  
I CC:       cc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
I CXX:      g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

cc  -I.              -O3 -DNDEBUG -std=c11   -fPIC -pthread -mavx -mavx2 -mfma -mf16c -msse3   -c ggml.c -o ggml.o
ggml.c: In function ‘ggml_time_ms’:
ggml.c:309:5: warning: implicit declaration of function ‘clock_gettime’ [-Wimplicit-function-declaration]
     clock_gettime(CLOCK_MONOTONIC, &ts);
     ^
ggml.c:309:19: error: ‘CLOCK_MONOTONIC’ undeclared (first use in this function)
     clock_gettime(CLOCK_MONOTONIC, &ts);
                   ^
ggml.c:309:19: note: each undeclared identifier is reported only once for each function it appears in
ggml.c: In function ‘ggml_time_us’:
ggml.c:315:19: error: ‘CLOCK_MONOTONIC’ undeclared (first use in this function)
     clock_gettime(CLOCK_MONOTONIC, &ts);
                   ^
Makefile:182: recipe for target 'ggml.o' failed
make: *** [ggml.o] Error 1

liuxiaocs7 avatar Mar 13 '23 07:03 liuxiaocs7

在ggml.h头文件中增加以下宏定义即可 #define _POSIX_C_SOURCE 199309L

wshzd avatar Mar 13 '23 10:03 wshzd

在ggml.h头文件中增加以下宏定义即可 #define _POSIX_C_SOURCE 199309L

This fixed it for me

anishthite avatar Mar 14 '23 02:03 anishthite

Adding -lrt to the CXXFLAGS and changing CFLAGS to use -std=gnu11 worked for me, running Ubuntu 16

gquarles avatar Mar 14 '23 03:03 gquarles

我的机器是centos7, 我在 Makefile文件添加 -D_POSIX_C_SOURCE=199309L 可以解决问题。

CFLAGS   = -I.              -O3 -DNDEBUG -std=c11   -fPIC -D_POSIX_C_SOURCE=199309L
CXXFLAGS = -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -D_POSIX_C_SOURCE=199309L

tdr1991 avatar Mar 15 '23 02:03 tdr1991

Same happens when compiling on macOS 10.7: ggml.c:310:19: error: use of undeclared identifier 'CLOCK MONOTONIC' ggml.c:316:19: error: use of undeclared identifier 'CLOCK MONOTONIC'

Errand24 avatar Apr 05 '23 09:04 Errand24