当我尝试在Linux中构建项目时,我得到了Error: undefined symbol clock_gettime。所以我发现我需要在构建命令(gcc)中添加-lrt。但是,现在它将无法在OS X中编译:ld: library not found for -lrt。我不知道该函数在静态链接代码中的确切位置,但是在没有librt的OS X中它似乎可以正常工作。链接的代码可能在#if __APPLE__之类的后面使用了替代方法。

有什么方法可以指示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

09-11 16:23