簡體   English   中英

鏈接到bsd / stdlib.h

[英]Linking to bsd/stdlib.h

我對鏈接的工作方式不太熟悉,如果我沒有足夠的細節,請提前道歉。

我在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

以下補丁怎么樣? 此補丁適用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM