5

Linux でプロジェクトをビルドしようとすると、Error: undefined symbol clock_gettime. -lrtそこで、ビルド コマンド (gcc)に追加する必要があることがわかりました。ただし、OS X: ではコンパイルされませんld: library not found for -lrt。この関数が静的にリンクされたコードにあるため、どこで呼び出されているのか正確にはわかりませんが、librt がなくても OS X で問題なく動作しているようです。リンクされたコードは、おそらく代替の背後にあるものを使用してい#if __APPLE__ます。

必要な場合、または存在する場合gccにのみリンクするように指示できる方法はありますか? librtそうでない場合、OS 固有のコマンドで 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

問題をグーグルで検索すると、適切な解決策が見つかります.1つは質問にコメントとして投稿され、もう1つはここにあります:

ここ

gettimeofday()clock_gettimeOS Xでは機能が提供されておらず 、コードを変更する必要があることに注意してください。

それがあなたを助けることを願っています、pedr0

于 2012-10-02T15:25:46.040 に答える