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

その特定のファイルについては、<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はソースファイルのもう1行です。


一般に、ファイルで<config.h>(または、より一般的には"config.h")を使用する場合は、構成ツール(通常autoconfまたはautomake)またはconfigureツールによって生成されるスクリプトを使用してconfig.hヘッダーを作成する必要があります。このファイルには、構成ヘッダーの影響を受ける条件付きコードがないため、削除できます。


ヘッダーリストをクリーンアップすると、プロジェクト内の他のソースファイルと同じようにファイルを処理できます。ビルドに追加される別のオブジェクトファイル(特別なオプションは必要ありません)としてコンパイルするのが最善です。それはあなたmakefileが完全にうまくやっているように見えることです。場合によっては、別のソースファイルに(ヘッダーファイルではなく)ソースファイルをインクルードすることが賢明または必要です。ただし、賢明な回数は厳しく制限されています。

于 2012-04-28T17:21:42.567 に答える
0

#includeC ファイルは使用しないでください。代わりに#includecompat.h を使用し、オプションをCFLAGS使用してヘッダー ファイルへのパスを指定します。-I

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