A. VS如何編譯一個包含多個頭文件、源文件的項目
你首先將另一個類的頭文件(otherclass.h)和源文件(otherclass.cpp)添加到你的工程(選擇添加現有項)。然後將你要用的另一個類的頭文件包含到你的類的源文件開頭,使用#include
"otherclass.h"然後就可以使用在你的類的源文件中使用另一個類創建對象,調用該對象成員變數和成員函數了。
B. gcc編譯線程程序,為什麼要加-lpthread,頭文件已經包含了<pthread.h>了啊
-lpthread是鏈接庫,
<pthread.h>只有申明,實現部分都在庫裡面。
創建線程時一般是把函數的指針做參數,所以要加一個取地址符號。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建議要檢查一下創建線程的返回值ret是否成功,防止影響後面的代碼。
(2)編譯包含頭文件擴展閱讀:
每個語言編譯器都是獨立程序,此程序可處理輸入的原始碼,並輸出組合語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的原始碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的暫存器轉換語言〈RTL〉的後端。
編譯器最佳化與靜態程序碼解析技術(例如FORTIFY_SOURCE,一個試圖發現緩沖區溢位〈buffer overflow〉的編譯器)在此階段應用於程序碼上。最後,適用於此硬體架構的組合語言程序碼以Jack Davidson與Chris Fraser發明的演算法產出。
C. c語言中如何編譯含頭文件的函數
在使用頭文件聲明的函數或結構的文件中添加#include"該頭文件"
一般來說該頭文件和.c文件同一目錄,或者放到編譯器能自動找到的位置
D. android.mk怎麼在jni編譯時把系統頭文件包含
Android 2.3.6:LOCAL_CPP_FEATURES: 可選。用來指定C++ features。 LOCAL_CPP_FEATURES := rtti LOCAL_CPP_FEATURES := exceptions 2.3.7:LOCAL_C_INCLUDES: 一個可選的path列表。相對於NDK ROOT 目錄。編譯時,將會把這些目錄附上。 LOCAL_C_INCLUDES := sources/foo LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo 2.3.8: LOCAL_CFLAGS: 一個可選的設置,在編譯C/C++ source 時添加如Flags。 用來附加編譯選項。 注意:不要嘗試在此處修改編譯的優化選項和Debug等級。它會通過您Application.mk中的信息自動指定。 也可以指定include 目錄通過:LOCAL_CFLAGS += -I<path>。 這個方法比使用LOCAL_C_INCLUDES要好。因為這樣也可以被ndk-debug使用。 2.3.9: LOCAL_CXXFLAGS: LOCAL_CPPFLAGS的別名。 2.3.10: LOCAL_CPPFLAGS: C++ Source 編譯時添加的C Flags。這些Flags將出現在LOCAL_CFLAGS flags 的後面。 2.3.11: LOCAL_STATIC_LIBRARIES: 要鏈接到本模塊的靜態庫list。(built with BUILD_STATIC_LIBRARY) 2.3.12: LOCAL_SHARED_LIBRARIES: 要鏈接到本模塊的動態庫。 2.3.13:LOCAL_WHOLE_STATIC_LIBRARIES: 靜態庫全鏈接。 不同於LOCAL_STATIC_LIBRARIES,類似於使用--whole-archive 2.3.14:LOCAL_LDLIBS: linker flags。 可以用它來添加系統庫。 如 -lz: LOCAL_LDLIBS := -lz 2.3.15: LOCAL_ALLOW_UNDEFINED_SYMBOLS: 2.3.16: LOCAL_ARM_MODE: 預設模式下,ARM目標代碼被編譯為thumb模式。每個指令16位。如果指定此變數為:arm。 則指令為32位。 LOCAL_ARM_MODE := arm 其實也可以指定某一個或者某幾個文件的ARM指令模式。 2.3.17: LOCAL_ARM_NEON: 設置為true時,會講浮點編譯成neon指令。這會極大地加快浮點運算(前提是硬體支持) 只有targeting 為 'armeabi-v7a'時才可以。 2.3.18:LOCAL_DISABLE_NO_EXECUTE: 2.3.19: LOCAL_EXPORT_CFLAGS: 定義這個變數用來記錄C/C++編譯器標志集合, 並且會被添加到其他任何以LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的模塊的LOCAL_CFLAGS定義中 LOCAL_SRC_FILES := foo.c bar.c.arm 注意:此處NDK版本為NDK R7C.(不同NDK版本,ndk-build所產生的Makefile並不完全相同)
E. 已經包含了頭文件,但編譯提示未定義變數的一種情況分析
ipc_mem.c 文件中 引用了 定義有con_conf_t結構體的 con_conf_info.h 頭文件,並且 ipc_mem.h 頭文件中聲明con_conf_t結構體變數,而 sample.c 中 引用了 頭文件 ipc_mem.h 了,但是編譯提示ipc_mem.h中未定義con_conf_t
所以,需要確認好別的文件中是否也需要包含相關頭文件,如果是,光禪做在一個賀鋒衡地方引用頭文件是不夠的。
如本次問題中基啟,ipc_mem.c中會用到con_conf_t結構體,而sample.c中雖然不會用到con_conf_t結構體,但是sample.c中包含了ipc_mem.h,而ipc_mem.h中又聲明了con_conf_t結構體變數,所以編譯到sample.c文件時,由於看到ipc_mem.h聲明了con_conf_t,但是編譯器不止知道con_conf_t是哪裡來的,所以會報錯。
要解決這個問題,只需要在sample.c再引用con_conf_info.h頭文件,再編譯即可。