我对链接的工作方式不太熟悉,如果我没有足够的细节,请提前道歉。
我在ubuntu 11.10上安装了带有sudo apt-get install libbsd-dev
的bsd库我相对肯定已经安装了这个,因为存在堆/ mergesort的man函数(我正在寻找的函数)
我希望编译的C文件在文件顶部有#include <bsd/stdlib.h>
。我也是#include <stdlib.h>
。
Makefile适用于其他库,包括time.h给我struct timespec
在假设apt-get安装libbsd的位置时是否存在错误?第二个stdlib是否会以某种方式发生冲突?
再一次,为稀疏的细节道歉。
下面的Makefile代码:
CFLAGS=-g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG $(OPTFLAGS)
LIBS=-llcthw -lbsd -lrt -ldl $(OPTLIBS)
LDLIBS=-lbsd -lrt -ldl
PREFIX?=/usr/local
SOURCES=$(wildcard src/**/*.c src/*.c)
OBJECTS=$(patsubst %.c,%.o,$(SOURCES))
TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst %.c,%,$(TEST_SRC))
TARGET=build/liblcthw.a
SO_TARGET=$(patsubst %.a,%.so,$(TARGET))
all : $(TARGET) $(SO_TARGET) tests
答案 0 :(得分:2)
以下补丁怎么样? 此修补程序适用于http://c.learncodethehardway.org/book/ex28.html
中的Makefile--- orig/Makefile 2013-11-15 17:58:44.571824670 +0900
+++ Makefile 2013-11-15 17:59:37.315825864 +0900
@@ -1,5 +1,6 @@
-CFLAGS=-g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG $(OPTFLAGS)
-LIBS=-ldl $(OPTLIBS)
+CFLAGS=-g -O2 -Wall -Wextra -Isrc $(shell pkg-config --cflags libbsd) -rdynamic -DNDEBUG $(OPTFLAGS)
+COMMON_LIBS = $(shell pkg-config --libs libbsd) -ldl $(OPTLIBS)
+LDLIBS=$(COMMON_LIBS)
PREFIX?=/usr/local
SOURCES=$(wildcard src/**/*.c src/*.c)
@@ -14,7 +15,7 @@
# The Target Build
all: $(TARGET) $(SO_TARGET) tests
-dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS)
+dev: CFLAGS=-g -Wall -Wextra -Isrc $(shell pkg-config --cflags libbsd) $(OPTFLAGS)
dev: all
$(TARGET): CFLAGS += -fPIC
@@ -31,7 +32,7 @@
# The Unit Tests
.PHONY: tests
-tests: CFLAGS += $(TARGET)
+tests: LDLIBS = $(TARGET) $(COMMON_LIBS)
tests: $(TESTS)
sh ./tests/runtests.sh