3

LINUX で C プログラムをコンパイルしているときに、次のエラーが発生します。エラー:

stream.h:1123: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
stream.h:1124: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'
stream.h:1125: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'

行 1123、1124、および 1125 を以下に示します。

__STREAMS_EXTERN int adjmsg(mblk_t *mp, register ssize_t length);
__STREAMS_EXTERN mblk_t *allocb(size_t size, unsigned int priority);
__STREAMS_EXTERN mblk_t *copyb(register mblk_t *mp);

C プログラムには、stream.h を含むヘッダー ファイルが含まれています。これを解決する方法はありますか?

4

3 に答える 3

1

コードのコンテキストが明確ではありませんが、OpenSSL ライブラリを使用しているようです (または、そのソース コードからコピー アンド ペーストを行っているようです)。

streams_fastcallマクロはヘッダー ファイルで定義されますkmem.h。含めましたか?コピー & ペーストを行うだけの場合は、STREAMS_EXTERN定義の前に次の行を追加するだけです。

#ifndef streams_fastcall
#if defined __i386__ || defined __x86_64__ || defined __k8__
#define streams_fastcall __attribute__((__regparm__(3)))
#else
#define streams_fastcall
#endif
#endif

: Microsoft 固有の (ただし、Windows で広く使用されている) という名前の呼び出し規則のようにstreams_fastcall 聞こえ__fastcallます。regparm属性を使用して、スタックの代わりにレジスタを使用していくつかの引数を渡す必要があることを指定し、これが定義するものであるため、彼らはその名前を使用したと思い__fastcallます(または単に高速だからです!笑)

于 2012-05-08T13:57:27.447 に答える
1

__STREAMS_EXTERN物事を台無しにする方法で定義されていることは明らかです。

はどのように__STREAMS_EXTERN定義されていますか?

于 2012-05-08T13:17:54.837 に答える
0

エラーが行方不明に関連していない場合; コードに同様の構文エラーがある場合は、openSSL インクルードへの不適切な参照がないか確認してください。

openSSL では、/opt/openssl/include/openssl に err.h と evp.h が含まれており、ディレクティブを -I としてコンパイルします。-L /opt/openssl/lib、-l crypto および -l dl

このインクルードを .h ファイルに含めると、#include (err.h と同じ) というエラーが発生します。

これをインクルード #include に置き換えるだけで解決します。

于 2014-12-01T12:36:03.360 に答える