毛病:sem_union的存儲年夜小未知成績的處理辦法。本站提示廣大學習愛好者:(毛病:sem_union的存儲年夜小未知成績的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是毛病:sem_union的存儲年夜小未知成績的處理辦法正文
明天在編譯代碼的時刻提醒 毛病: ‘sem_union'的存儲年夜小未知
成績緣由:在新版2.6內核中關於union sem_union 這個結合體曾經被正文了,須要本身寫這個結合體.
處理計劃:在C文件中先界說:
union semun { int val; struct semid_ds *buf; unsigned short *array; }sem_union;
隨後編譯時它就可以找到事後界說好的sem_union結合體了.
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<pthread.h>
(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結合體了。