Gcc 如何构建需要clock\u gettime函数的Linux/OSX makefile

Gcc 如何构建需要clock\u gettime函数的Linux/OSX makefile,gcc,makefile,Gcc,Makefile,当我试图在Linux中构建一个项目时,我得到了错误:未定义的符号clock\u gettime。所以我发现我需要在build命令(gcc)中添加-lrt。但是,现在它不会在OSX中编译:ld:library-not-found for-lrt。我不知道这个函数在哪里被调用,因为它是在静态链接代码中调用的,但在没有librt的osx中它似乎工作得很好。链接的代码可能使用了#if uuu APPLE uuu之类的替代方法 如果需要的话,或者如果存在的话,我是否可以指示gcc只链接librt?如果没有

当我试图在Linux中构建一个项目时,我得到了
错误:未定义的符号clock\u gettime
。所以我发现我需要在build命令(gcc)中添加
-lrt
。但是,现在它不会在OSX中编译:
ld:library-not-found for-lrt
。我不知道这个函数在哪里被调用,因为它是在静态链接代码中调用的,但在没有librt的osx中它似乎工作得很好。链接的代码可能使用了
#if uuu APPLE uuu
之类的替代方法

如果需要的话,或者如果存在的话,我是否可以指示
gcc
只链接
librt
?如果没有,如何使用特定于操作系统的命令创建Makefile?我不是在用autoconf之类的东西

Makefile相当复杂,但这里是操作部分:

CC := g++
# In this line, remove -lrt to compile on OS X
LFLAGS := -lpthread -lrt
CFLAGS := -c -Wall -Iboost_build -Ilibtorrent_build/include -Iinc
OBJDIR := obj
SRCDIR := src
SRC := $(wildcard $(SRCDIR)/*.cpp)
OBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRC))

# Note that libtorrent is built with a modified jamfile to place the
# libtorrent.a file in a consistent location; otherwise it ends up somewhere
# dependent on build environment.
all : $(OBJS) libtorrent_build boost_build
    $(CC) -o exec $(LFLAGS) \
    $(OBJS) \
    libtorrent_build/bin/libtorrent.a \
    boost_build/stage/lib/libboost_system.a
你可以试试这个:

LFLAGS := -lpthread

OS := $(shell uname -s)
ifeq ($(OS),Linux)
LFLAGS += -lrt
endif

如果你用谷歌搜索这个问题,你会发现一套很好的解决方案,其中一个是作为问题的评论发布的,另一个是:

gettimeofday()
可能是一个更好的解决方案,如果您编译的代码不是由您编写的,请记住OSX下没有提供
clock\u gettime
函数,您需要修改代码

希望能对你有所帮助,,
pedr0

如果makefile很简单,你能发布它吗?看这个:如果有人试图告诉我关于时钟的替代方案,我会勒死某人。我非常痛苦地说我无法控制使用这个函数,这纯粹是一个编译器问题,而不是代码问题。(愤怒来自于我初步的谷歌搜索结果,完全回答了“此功能的替代方案”的问题)可能不是最好的方式,但至少对我目前的情况有效。