5

当我尝试在 Linux 中构建一个项目时,我得到了Error: undefined symbol clock_gettime. 所以我发现我需要添加-lrt到构建命令(gcc)。但是,现在它不会在 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
4

2 回答 2

12

你可以试试这个:

LFLAGS := -lpthread

OS := $(shell uname -s)
ifeq ($(OS),Linux)
LFLAGS += -lrt
endif
于 2012-10-02T15:24:09.397 回答
-1

如果你用谷歌搜索这个问题,你会找到一套很好的解决方案,一个作为问题的评论发布,另一个在这里:

这里

gettimeofday()可能是一个更好的解决方案,如果您正在编译不是您编写的代码,请记住 clock_gettimeOS X 下不提供该功能,您需要修改代码。

希望能帮到你,pedr0

于 2012-10-02T15:25:46.040 回答