エラー:sem_Unionのストレージサイズ不明な問題の解決方法

1353 ワード

今日コードをコンパイルするときにエラーが表示されました:'sem_union'のストレージサイズが不明です
問題の原因:新しい2.6カーネルでunion sem_についてunionという連合体はすでに注釈されているので、自分でこの連合体を書く必要があります.
ソリューション:Cファイルで定義:

union semun 
{
	int val;  
	struct semid_ds *buf; 
	unsigned short *array;
}sem_union;

その後コンパイルすると、事前に定義されたsem_が見つかります.ユニオン連合体だ
Linuxでコンパイル中に発生したエラーと解決方法
(1)Linux初心者であるため,スレッドプログラミングを開始し,GUN/Linuxプログラミングガイドの一例に従ってコンパイルを入力したところ,次のようなエラーが発生した.
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
問題の原因:
pthreadライブラリはLinuxシステムのデフォルトのライブラリではありません.接続時に静的ライブラリlibpthreadを使用する必要があります.a、だからpthread_を使ってcreate()スレッドの作成、pthread_の呼び出しatfork()関数がforkプロセッサを確立する場合は、ライブラリをリンクする必要があります.
問題解決:
コンパイルに-lpthreadパラメータを追加する
gcc -o thread thread.c -lpthread
thread.cあなたのソースファイルのために、ヘッダファイル#includeを加えるのを忘れないでください.
(2)警告:組み込み関数strlen互換性のない暗黙的宣言、組み込み関数exit互換性のない暗黙的宣言
問題の原因:関数strlenがstring内にあるため、exitはstdlib内にあります.ファイルにヘッダファイルstringが追加されていません.hとstdlib
問題解決:ファイルにヘッダファイルstringを追加します.hとstdlib
(3)エラー:sem_unionのストレージサイズが不明
問題の原因:新しい2.6カーネルでunion sem_についてunionという連合体はすでに注釈されているので、自分でこの連合体を書く必要があります.
問題解決:Cファイルで定義する
union semun {int val; struct semid_ds *buf; unsigned short *array;} sem_union;
その後コンパイルすると、事前に定義されたsem_が見つかります.union連合体です.