我不太熟悉链接的工作原理,所以如果我没有提供足够的详细信息,请提前致歉。
我已经用 sudo apt-get install libbsd-dev
安装了 bsd 库在 ubuntu 11.10 上我相对确定它已经安装,因为存在堆/合并排序的 man 函数(我正在寻找的函数)
我要编译的 C 文件有 #include <bsd/stdlib.h>
在文件的顶部。我也是#include <stdlib.h>
.
Makefile 适用于其他库,包括 time.h 给我 struct timespec
假设 apt-get 安装 libbsd 的位置有什么错误吗?第二个标准库是否以某种方式发生冲突?
再一次为稀疏的细节道歉。
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
最佳答案
下面的补丁怎么样? 此补丁适用于 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
关于c - 链接到 bsd/stdlib.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368121/