2016-11-09 44 views
1

私はプログラムでclock_gettimeを使用しています。私も含めて試してみましたが、いずれも動作しませんでした。コンパイラの引数に-lrtを追加しましたが、同じエラーが表示されます。clock_gettimeとCLOCK_MONOTONICのコンパイルエラー

これは

CentOS Linux release 7.2.1511 (Core) 
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) 
GNU ld version 2.23.52.0.1-55.el7 20130226 
ldd (GNU libc) 2.17 

コンパイラの出力である:

gcc -o main packet.c connect.c transport.c accept.c main.c close.c util.c receive.c send.c congestion.c -Wall -g -std=c99 -lrt 
util.c: In function ‘millis’: 
util.c:42:21: error: storage size of ‘t’ isn’t known 
    struct timespec t; 
        ^
util.c:43:5: warning: implicit declaration of function ‘clock_gettime’ [-Wimplicit-function-declaration] 
    clock_gettime(CLOCK_MONOTONIC_RAW, &t); 
    ^
util.c:43:19: error: ‘CLOCK_MONOTONIC_RAW’ undeclared (first use in this function) 
    clock_gettime(CLOCK_MONOTONIC_RAW, &t); 
      ^

Makefileの

CFLAGS = -Wall -g -std=c99 
LIBS = -lrt 

# Should be equivalent to your list of C files, if you don't build selectively 
SRC=$(wildcard *.c) 

main: $(SRC) 
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 

util.hのトップ

#ifndef UTILS_438_H_ 
#define UTILS_438_H_ 

#include "const.h" 
#include "data.h" 
#include "transport.h" 

#include <time.h> 
util.c

#include "util.h" 

#include <time.h> 
#include <stdio.h> 
#include <string.h> 

の10

トップ、私はヘッダ(<time.h>)を含む前にこの

+1

リンカエラーではない、 '#include'問題のどこかで – yano

+2

コンパイラの警告とエラーが出てくる理由を理解する必要があります。リンクの問題ではありません。あなたは 'time.h'をインクルードしているので、警告を出すべきではありません。 [mcve]を作成して、さらに手伝ってもらえますか?おそらく 'c99'フラグが途切れてしまうのでしょうか? (ちょうど何かを推測しようとする) –

+2

代わりに-std = gnu99を試しますか? – Bonan

答えて

5

に答えるために多くの情報を供給できるなら、私に知らせて

#define _POSIX_C_SOURCE 199309L 

を行ってください

http://man7.org/linux/man-pages/man2/clock_gettime.2.html

glibc向けの

機能検査マクロの要件(feature_test_macros(7)参照):

clock_getres(), clock_gettime(), clock_settime(): 
      _POSIX_C_SOURCE >= 199309L 

http://man7.org/linux/man-pages/man7/feature_test_macros.7.html

_POSIX_C_SOURCE が は、以下のように、このマクロ原因が定義を公開するファイルヘッダ定義:

· The value 1 exposes definitions conforming to POSIX.1-1990 and 
    ISO C (1990). 

    · The value 2 or greater additionally exposes definitions for 
    POSIX.2-1992. 

    · The value 199309L or greater additionally exposes definitions 
    for POSIX.1b (real-time extensions). 

    · The value 199506L or greater additionally exposes definitions 
    for POSIX.1c (threads). 

    · (Since glibc 2.3.3) The value 200112L or greater additionally 
    exposes definitions corresponding to the POSIX.1-2001 base 
    specification (excluding the XSI extension). This value also 
    causes C95 (since glibc 2.12) and C99 (since glibc 2.10) 
    features to be exposed (in other words, the equivalent of 
    defining _ISOC99_SOURCE). 

    · (Since glibc 2.10) The value 200809L or greater additionally 
    exposes definitions corresponding to the POSIX.1-2008 base 
    specification (excluding the XSI extension). 
+0

MinGWで、これと同じコンパイルエラーを試みました...あなたはこれを読んでいます:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47571 –

+0

@ Jean-FrançoisFabreMingwはあなたにすべてのposix関数。 OPはLinuxを使用しているので、これは正常に動作します。 – nos

+0

gccのバージョンが5.4、glibcのバージョンが2.23ですが、これはすでに定義済みです。以前のlddとgccバージョン(4.8.4)でそれが必要でした。 –

関連する問題