0

我找到了这些库:http ://svn.opendnssec.org/trunk/OpenDNSSEC/common/用于在 c 中进行编码。我想使用它们,但我不确定如何添加它们。

如果我添加我在 b64_ntop.c 中#include "b64_ntop.c"有问题(没有这样的文件或目录)。#include <config.h>如何添加这些模块?

My makefile:
CC=gcc
CFLAGS=-std=gnu99 -Wall -pedantic

all: rdtclient

rdtclient: b64_ntop.o rdtclient.o 
    $(CC) $(CFLAGS) b64_ntop.o rdtclient.o -o rdtclient

感谢帮助

4

2 回答 2

0

你不应该#include是 C 文件。取而代之的是 compat.h 并在using选项#include中指定头文件的路径:CFLAGS-I

CFLAGS=-std=gnu99 -Wall -pedantic -Ipath/to/header
于 2012-04-28T15:26:40.340 回答
0

对于该特定文件,您可以删除除<stdlib.h>(需要abort())之外的每个标题,但您将添加<stdint.h>到 get uint8_t

#include <config.h>      // Remove

#include <sys/types.h>   // Remove
#include <sys/param.h>   // Remove
#include <sys/socket.h>  // Remove

#include <netinet/in.h>  // Remove
#include <arpa/inet.h>   // Remove

#include <ctype.h>       // Remove
#include <stdio.h>       // Remove
#include <stdlib.h>      // Keep
#include <string.h>      // Remove
#include <stdint.h>      // Add

不需要我能看到的其他人,当我测试它时,GCC 同意我的看法。

我不确定引入了哪个标题uint8_t;最有可能的是<sys/types.h>,但 C 标准说<stdint.h>这样做(或<inttypes.h>这样做)。

您还应该有一个声明函数的头文件,并且该头文件应包含在此文件中以确保函数声明和定义一致,并且该头文件应包含在使用该函数的每个源文件中。显然,这是#include源文件中的另一行。


一般来说,如果一个文件使用<config.h>(或者,更常见的是,"config.h"),那么您需要使用配置工具(通常是autoconfautomake)或configure工具生成的脚本来创建config.h头文件。在这个文件中,没有受配置头影响的条件代码,因此可以将其删除。


清理标题列表后,您可以像对待项目中的任何其他源文件一样对待该文件。最好将其编译为添加到构建中的单独目标文件(不需要特殊选项)。这就是你makefile似乎做得很好的事情。有时,在另一个源文件中包含一个源文件(而不是头文件)是明智的或必要的。但是,合理的次数受到严格限制。

于 2012-04-28T17:21:42.567 回答