【问题标题】:Linking to bsd/stdlib.h链接到 bsd/stdlib.h
【发布时间】:2013-08-24 10:57:05
【问题描述】:

我对链接的工作原理不太熟悉,所以如果我没有足够的细节,请提前道歉。

我已经在 ubuntu 11.10 上安装了带有sudo apt-get install libbsd-dev 的 bsd 库,我比较确定它已经安装,因为存在用于 heap/mergesort 的 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

【问题讨论】:

    标签: c linker gnu-make


    【解决方案1】:

    下面的补丁怎么样? 此补丁适用于 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
    

    【讨论】:

    • 谢谢!有效!修复主要是按正确的顺序修改 libbsd 以便链接器响应吗?或者修复只是告诉编译器需要 libbsd? (顺便说一句,这是 LCTHW 的 ex35 上的额外信用分配;xubuntu 没有合并或堆排序)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多