C - 将base64方法添加到我的文件中

时间:2012-04-28 15:13:01

标签: c makefile base64

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

如果我添加#include "b64_ntop.c"我在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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

你不应该#include一个C档案。而是#include compat.h并使用CFLAGS选项在-I中指定头文件的路径:

CFLAGS=-std=gnu99 -Wall -pedantic -Ipath/to/header

答案 1 :(得分:0)

对于该特定文件,您可以删除<stdlib.h>以外的所有标头(abort()所需),但您需要添加<stdint.h>以获取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似乎做得非常好。有时,在另一个源文件中包含源文件(而不是头文件)是明智的或必要的。但是,合理的次数受到严格限制。