安裝glew[3]. glew是一個跨平臺的C++庫,是一個OpenGL圖形接口擴展庫 sudo apt-get install libglew1.8 libglew-dev. ##安裝glx[4] glx是linux下OpenGL的X Window ...
ubuntu14.0..
OpenGL,glx,..
软件开发平台及语言笔记大全(超详细)
Ubuntu下安裝OpenGL圖形庫
安裝基本編譯環境
sudoapt-getinstallbuild-essential
安裝OpenGLLibrary
sudoapt-getinstalllibgl1-mesa-dev
安裝OpenGLUtilities[1]
OpenGLUtilities是一組建構於OpenGLLibrary之上的工具組,提供許多很方便的函式,使OpenGL更強大且更容易使用。
sudoapt-getinstalllibglu1-mesa-dev
安裝OpenGLUtilityToolkit[2]
OpenGLUtilityToolkit是建立在OpenGLUtilities上面的工具箱,除了強化了OpenGLUtilities的不足之外,也增加了OpenGL對於視窗界面支援
sudoapt-getinstallfreeglut3-dev
安裝glew[3]
glew是一個跨平臺的C++庫,是一個OpenGL圖形接口擴展庫
sudoapt-getinstalllibglew1.8libglew-dev
##安裝glx[4]glx是linux下OpenGL的XWindowSystem接口擴展庫,它允許通過x調用OpenGL庫
sudoapt-getinstalllibgl1-mesa-glx
##補充有的也可能需要安裝XmuXmu即X11miscellaneousutilitylibrary(X11實用工具庫)
sudoapt-getinstalllibxmu-dev
OpenGLMathematics(libglm)
sudoapt-getinstalllibglm-dev
##說明:OpenGL不同頭文件及庫的說明
###[1]OpenGLUtilities
glu是實用庫,包含有43個函數,函數名的前綴為glu。
Glu為了減輕繁重的編程工作,封裝了OpenGL函數,Glu函數通過調用核心庫的函數,為開發者提供相對簡單的用法,實現一些較為複雜的操作。
###[2]OpenGLUtilityToolkit
glut是實用工具庫,基本上是用於做窗口界面的,並且是跨平臺(所以有時你喜歡做簡單的demo的話,可以光用glut就ok了)
###[3]glew
glew是一個跨平臺的C++擴展庫,基於OpenGL圖形接口。
使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵數,但OpenGL現在都發展到2.0以上了,要使用這些OpenGL的高級特性,就必須下載最新的擴展,另外,不同的顯卡公司,也會發布一些只有自家顯卡才支持的擴展函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴展庫,你就再也不用為找不到函數的接口而煩惱,因為GLEW能自動識別你的平臺所支持的全部OpenGL高級擴展涵數。
也就是說,只要包含一個glew.h頭文件,你就能使用gl,glu,glext,wgl,glx的全部函數。
GLEW支持目前流行的各種操作系統(includingWindows,Linux,MacOSX,FreeBSD,Irix,andSolaris)。
###[4]glx
glx:OpenGLextensionforX.
對於X窗口系統,它所使用的的OpenGL擴展(GLX)是作為OpenGL的一個附件提供的,所有的GLX函數都使用前綴glX。
glx是OpenGLExtensiontotheXWindowSystem的縮寫。
它作為x的擴展,是x協議和Xserver的一部分,已經包含在Xserver的代碼中了。
GLX提供了xwindowsystem使用的OpenGL接口,允許通過x調用OpenGL庫。
OpenGL在使用時,需要與一個實際的窗口系統關聯起來。
在不同平臺上有不同的機制以關聯窗口系統,在Windows上是WGL,在Linux上是GLX,在AppleOS上是AGL等。
###[5]頭文件
:OpenGL所使用的函數和常量聲明。
:OpenGLUtilityToolkit所使用的函數和常量聲明。
GLU庫屬於OpenGL標準的一部分。
(以下各種庫則不屬於)
:OpenGLUtilityToolkit所使用的函數和常量聲明。
目前許多OpenGL教程使用這個庫來編寫演示程序。
一些編譯系統可能不直接提供這個庫(例如VC系列),需要單獨下載安裝。
這個頭文件自動包含了和,編程時不必再次包含它們。
:GLAUX(OpenGL輔助庫)所使用的函數和常量聲明。
這個庫的功能大致與類似,這個庫提供了創建窗口,處理鍵盤和鼠標事件,設置調色板等OpenGL本身不提供,但在編寫OpenGL程序時又經常用到的功能。
目前這個庫已經過時,只有比較少的編譯環境中有提供,例如VC系列。
在VC系列編譯器中,使用這個頭文件之前必須使用#include或者具有類似功能的頭文件。
:擴展頭文件。
因為微軟公司對OpenGL的支持不太積極,VC系列編譯器雖然有這個頭文件,但是裡面只有OpenGL1.1版本中所規定的內容,而沒有OpenGL1.2及其以後版本。
對當前的計算機配置而言,幾乎都支持OpenGL1.4版本,更高的則到1.5,2.0,2.1,而VC無法直接使用這些功能。
為瞭解決這一問題,就有了頭文件。
這個頭文件提供了高版本OpenGL所需要的各種常數聲明以及函數指針聲明。
:擴展頭文件。
與類似,但這個頭文件中只提供適用於Windows系統的各種OpenGL擴展所使用的函數和常量,不適用於其它操作系統。
"glee.h":GLEE開源庫的頭文件。
它的出現是因為雖然可以使用高版本的OpenGL函數,但是使用的形式不太方便。
GLEE庫則讓高版本的OpenGL函數與其它OpenGL函數在使用上同樣方便。
需要注意的是,這個頭文件與是衝突的,在包含"glee.h"之前,不應該包含。
#include
#include"glee.h"//錯誤,因為glut.h中含有gl.h,它與glee.h衝突
//但是如果把兩個include順序交換,則正確
"glos.h":不明,雖然這個也時常見到,可能是與系統相關的各種功能,也可能只是自己編寫的一個文件。
測試文件
#include
#include
#include
voidinit();
voiddisplay();
intmain(intargc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(0,0);
glutInitWindowSize(300,300);
glutCreateWindow("OpenGL3DView");
init();
glutDisplayFunc(display);
glutMainLoop();
return0;
}
voidinit()
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5,5,-5,5,5,15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,0,10,0,0,0,0,1,0);
}
voiddisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0,0);
glutWireTeapot(3);
glFlush();
}
編譯命令
C
gccexample.c-oexample.out-lGL-lGLU-lglut
C++
g++-lGL-lGLU-glut-lGLEWexample.cpp-oexample
Makefile
INCLUDE=-I/usr/X11R6/include/
LIBDIR=-L/usr/X11R6/lib
FLAGS=-Wall
CC=g++#changetogccifusingC
CFLAGS=$(FLAGS)$(INCLUDE)
LIBS=-lglut-lGL-lGLU-lGLEW-lm
All:your_app#changeyour_app.
your_app:your_app.o
$(CC)$(CFLAGS)-o$@$(LIBDIR)$comm
Linux內核調試方法gdbocgdboeJTAG
Linux內核kernelpanic機制淺析
如何在linuxkernel中加入systemcall
查看Linux內核編譯配置
Ubuntu更換內核方法
調試工具ltracestraceftrace的使用
根據內核Oops定位代碼
內核和用戶空間共享內存的實現例程-proc和mmap
陳鍾誠LinuxKernel
簡介
行程結構
Linux的記憶體管理
Linux的檔案系統
Linux的輸出入系統
Linux的目的檔
Linux的動態連結與載入(DynamicLinking)
例說linux內核與應用數據通信系列
(一):添加一個系統調用
(二):proc虛擬文件系統
(三):讀寫內核設備驅動文件
(四):映射設備內核空間到用戶態
把握linux內核設計思想系列
(一):系統調用
(二):硬中斷及中斷處理
(三):下半部機制之軟中斷
(四):下半部機制之tasklet
(五):下半部機制之工作隊列及幾種機制的選擇
(六):內核時鐘中斷
(七):內核定時器和定時執行
(八):進程管理分析
(九):進程調度
(十):內核同步
(十一):內存管理之頁的分配與回收
移植LinuxKernel造成無法開機之解決方案以及除錯工具
delay/sleep延遲函式學習筆記
密碼學演算法實作流程
效能工具–perf來分析探討硬體加密之瓶頸
Linuxkernel調試打log流和斷點流
Linuxkernelv4.0codefor
TraceKernel程式的一些小技巧
EmbeddedLinuxPrimer讀書筆記
Chapter2:TheBigPicture
Chapter4:淺談Linux核心
Chapter5:KernelInitialization
Chapter6:UserSpaceInitialization
Chapter8:裝置驅動程式的基本知識
Chapter9:Filesystem
LinuxDriver
LinuxDeviceDriverProgramming
Linux裝置驅動程式的概要
Linux的授權
準備開發裝置驅動程式
開發驅動程式的第一步
開發driver需要的基礎知識
實際撰寫驅動程式
控制硬體
記憶體
計時器
同步與鎖定
中斷
測試與除錯
《深入Linux設備驅動程序內核機制》之MMAP內存頁面示例
LinuxDeviceModel三角關係
Linux設備模型(1)_基本概念
Linux設備模型(2)_Kobject
mmapdriverimplementation
嵌入式Linux驅動模板精講與項目實踐
動手寫LinuxDriver
OS
[轉]打造簡易作業系統
(一)開機HelloWorld實例
(二)BootLoader+作業系統載入實例(QEMU)
(三)BootLoader+作業系統載入實例(CFCard)
(四)由16位元真實模式(RealMode)進入32位元保護模式(ProtectMode)
(五)使用LocalDescriptorTable(LDT)
(六)簡介CallGate
(七)利用CallGate與TSS(Task-StateSegment)實現特權等級的轉換
PageTablesize太大之解決
LinuxSystem
Multi-pthreadnote
fork+pthread_create記憶體空間差異
ProsandCons
Linux內核中線程的實現方式
linux系統編程
文件與IO(一):文件描述符、open,close
文件與IO(二):系統調用read和write
文件與IO(三):利用lseek()創建空洞文件
文件與IO(四):目錄訪問相關係統調用
文件與IO(五):stat()系統調用獲取文件信息
文件與IO(六):實現ls-l功能
文件與IO(七):時間函數小結
文件與IO(八):文件描述符相關操作-dup,dup2,fcntl
進程(一):進程與程序
進程(二):進程生命週期與PCB(進程控制塊)
進程(三):進程複製fork,孤兒進程,殭屍進程
進程(四):進程退出exit,_exit區別即atexit函數
進程(五):exec系列函數(execl,execlp,execle,execv,execvp)使用
進程(六):父進程查詢子進程的退出,wait,waitpid
進程(七):system()函數使用
進程(八):守護進程詳解及創建,daemon()使用
信號(一):中斷與信號
信號(二):信號處理流程(產生、註冊、註銷、執行)
信號(三):信號安裝、signal、kill,arise講解
信號(四):alarm和可重入函數
信號(五):信號集操作函數,信號阻塞與未決
信號(六):信號發送函數sigqueue和信號安裝函數sigaction
信號(七):被信號中斷的系統調用和庫函數處理方式
信號(八):三種時間結構及定時器setitimer()詳解
管道(一):匿名管道(pipe)
管道(二):管道讀寫規則
管道(三):命令管道(FIFO)
錯誤處理:perror,strerror和errno
利用backtrace和backtrace_symbols函數打印調用棧信息
linux系統編程:setjmp和longjmp函數用法
linux新定時器:timefd及相關操作函數
Note
IPC
PIPE
Signal
LinuxDebugging
使用反彙編理解C++程序函數調用棧
熟悉AT&T彙編語言
C++函數調用的參數傳遞方法總結(通過gdb+反彙編)
使用GDB來理解C++對象的內存佈局(多重繼承,虛繼承)
coredump分析入門
動態庫注入、ltrace、strace、Valgrind
使用反彙編理解動態庫函數調用方式GOT/PLT
core真的那麼難以追蹤嗎?
一次生產環境下的“內存洩露”
Linux作業系統分析
破解Linux操作系統的奧祕
Howprogramworks
進程的創建與可執行程序的加載
內核裝載ELF的過程總結
如何更新linuxconsole畫面
服務器進程為何通常fork()兩次
創建Daemon程式
Linux信號處理機制
函數調用棧的獲取原理分析
在Linux程序中輸出函數調用棧
C/C++混合編程
linux下C與C++混合編程
Static與Shared的函式庫撰寫
Linux的time指令
孤兒進程與殭屍進程[總結]
pkg-config使用及建立方法
簡述configure、pkg-config、pkg_config_path三者的關係
動態庫的鏈接和鏈接選項-L,-rpath-link,-rpath
LD_LIBRARY_PATH與-L的關係
shell環境變量以及set,env,export的區別
用gcc自製Library
如何使用pkg-config工具編譯鏈接第三方庫
stdout&stderr&fflush()
使用system()函數執行命令行命令簡述
ldconfig及LD_LIBRARY_PATH,LD_DEBUG,LD_PRELOAD
SIGINT後KILL自己
my_note
thread_create&signal使用技巧
pthread_sigmask控制線程的信號掩碼
C的ThreadPool筆記
IPaddressesfromaCprogram
OpenMPinlinux
MutexesVSSemaphores大揭祕
dlopen&dlsym用法
pthread_create&pthread_join&pthread_exit基本用法
LINUX下動態庫調用靜態庫的方法
C語言互斥鎖-雙條件變量實現循環打印
tutorial-pthreads
《ProgrammingwithPOSIXThreads》筆記
mmap映射空間與內存和磁盤的IO性能對比
一個並發10k的簡易群聊天室(使用epoll)
Mutex與Semaphore最大的差異是
[讀書會]Linux環境編程:從應用到內核
example
64位x86的函數調用棧佈局
如何手工展開函數棧來定位問題
第3章行程(process)環境
打印出一個完整的程序調用堆棧信息
Linux下IPC的運作方式
細說linuxIPC
基於socket的進程間通信(上)
基於socket的進程間通信(下)
mmap系統調用共享內存
posix共享內存
systemV共享內存
pipe和FIFO
信號(上)
信號(下)
posix消息隊列
systemV消息隊列
細說linuxIPC:各種IPC形式比較總結
補充現代Linux有兩種共享內存機制
Linux同步與互斥應用
(零):基礎概念
(一):posix線程及線程間互斥
(二):posix線程同步
(三):posix線程實現單個生產者和單個消費者模型
(四):posix信號量的互斥與同步
(五):systemV信號量的互斥與同步
(六):文件鎖
Linux下利用backtrace追蹤函數調用堆棧以及定位段錯誤
sendfile:Linux中的"零拷貝"
LinuxNote:daemon與backgroundprocess的差異
x86有個有個lea指令(LoadEffectiveAddress)
Linux平臺延時之sleep、usleep、nanosleep、select比較
linux用戶空間和內核空間延時函數
即時系統使用排程器
性能分析工具使用callgrind+kcachegrind
linux編程的108種奇淫巧計
1(FALSESHARING)
2(RDTSC)
3(magic2)
4(編譯展開)
5(rbp寄存器)
6(shellcode)
7(Lock-free實驗)
8(嵌入彙編的另一種寫法)
PForDelta索引壓縮算法的實現
11(亂序)
12(存儲計算)
15(減少複製)
16(如何達到內存最大帶寬,複雜指令)
17(如何達到內存最大帶寬,精簡指令,預取和NT)
18(SIMD)
關於bit操作(bit_settest_bit)
putvariablesinaregsiter
UserspaceI/Oschedulingformulti-fileoperations
ManualFIleLocking
Linux下fork函數及pthread函數的總結
C++在類裡面使用多線程技術
深入Linux多線程編程
C/C++每線程(thread-local)變量的使用
在pthread的線程函數中,使用類的非靜態成員函數來執行
從pthread轉換到std::thread
Assembly
myAssembly
Linux平臺學X86組合語言
現代計算機結構組成與工作過程
處理器指令碼及IA-32平臺瞭解
相關開發工具
從“helloworld!”開始
使用gdb調試彙編程序
數據的傳送
堆棧的使用
條件跳轉
循環指令
整數運算
字符串的傳送
字符串的存儲與加載
字符串的比較與搜索
函數的使用
使用命令行參數
在彙編語言中調用C庫函數
在彙編中使用linux系統調用
內聯彙編
C語言中調用匯編函數
彙編庫的使用(結)
[轉]如何在Linux下使用GNUAS撰寫組合語言
在Linux下使用GNUAS編寫組合語言-使用gdb進行除錯
linux反彙編旁門左道小技巧一則
gas學習byJianLee
閱讀assemblycode
Linuxasm系統調用:32位和64位的區別
如何在linux下編譯彙編程序,內功心法是彙編程序的結構
Toolchain
crosscompilerinstall
buildrootinstall
arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別
GDB
gdb常用指令
Beej'sQuickGuidetoGDB
簡易GDBScript教學,應用
[轉]GDB的妙用
GDB中應該知道的幾個調試方法
KGDB
[轉]DebugXorgwithGDBonUbuntu
[轉]使用GDB以樹狀方式將函式流程印出
gdb除錯技術
gdb的multiarch
gdb編譯
KGDBLinuxKernelforSamsung
用GDB追蹤glibc代碼執行過程
使用GDB分析二進位資料
cgdb編譯&使用
gdbC++小技巧
gdb展開C/C++的macro
solib-absolute-prefix和solib-search-path的區別
利用gdb進行sharedlibrary的除錯
用GDB跟蹤觀察共享庫函數的地址翻譯過程
KGDB調試LINUX內核
GDB調試原理ptrace系統調用
gdb遠程qemu-arm調試
gdb顯示結構體
GDBC++STLprinter
GDBdashboard:debuginfoataglance
在程式碼中使用signal()插入中斷點,讓GDB暫停程式做debugging
只要出問題,C4炸藥gdb都能搞定
懶人除錯法
兩種將gdb的輸出信息存到文件的方法
使用call命令在GDB中重複調用某函數
通過GDB學習C語言
用GDB反彙編調試linux內核
GDB下查看記憶體指令(x指令)
Howtodebugglibsourcecodeviagdb
HowtouseGDBdebugOpenCVprogrammes?
GDB實用教學:自動化你的debug
GDB反向調試(ReverseDebugging)
讓程序崩潰時產生coredump
很經典的GDB調試命令,包括查看變量,查看內存
gdb調試帶參數程序
整理常用的gdb技巧
GDB命令基礎,讓你的程序bug無處躲藏
valgrind+gdb
調試技巧備忘
TraceFunctionCallsUsingGDBRevisited
[GDB]除錯python程式thread間互相等待mutex,造成deadlock的問題
Linux內核分析雲課堂學習筆記
圖解分析彙編代碼以理解計算機是如何工作的
基於mykernel的一個簡單的時間片輪轉多道程序內核代碼分析
使用gdb跟蹤Linux內核啟動過程
使用庫函數API和C代碼中嵌入彙編代碼兩種方式使用同一個系統調用
分析system_call中斷處裡過程
初學Linux進程的描述和進程的創建
初學《Linux內核如何裝載和啟動一個可執行程序》
初學Linux中進程調度與進程切換過程
Linux內核學習總結
小博魚筆記
Linux內和分析(一)計算機是如何工作的
Linux內和分析(二)操作系統是如何工作的
C++
[轉]C++對象的內存佈局
[轉]C++對象模型之簡述C++對象的內存佈局
[轉]C++對象模型之詳述C++對象的內存佈局
[轉]C++虛函數表解析
如何判斷C++物件的類別?
ASimpleC++FunctionCallStackTraceUtility
探索C++虛函數在g++中的實現
樸實的C++設計
C++智能指針
Mutex::Autolockforc++
C++STL學習總結(全面)
學習C++:實踐者的方法(Beta1)
STL容器(一)-基本介紹
STL容器(二)-Iterator
C/C++十三誡
標準類型轉換:static_cast,dynamic_cast,reinterpret_cast,andconst_cast
example
vector用法
父子類別之間函數呼叫
C++:父類調用子類的成員函數
StdPair用法
2Dvectorarrayusingstd::vector
arraycopyusingstd::vector
std::vector封裝到shared_ptr
shared_ptr向下轉型
C++的Class中的一些重點整理
LOG建構解構
c++typeid()用法如何正確的顯示變數型態名稱的亂碼、異常
shared_ptr使用建構解構驗證記憶體回收
實例研討:從C++學習C高級技巧
為何Google禁止工程師使用C++staticobject?
是否能讓C++template的標頭檔只含宣告不含實作?
改善C++程序的150個建議
C++物件模型
物件模式(一)
物件模式(二)
C++類對象內存結構
C++四种继承关系中内存分布
GNUmake
example
好用Makefile
CMake
CMake初探
CMake入門
讓cmake顯示gcc/g++的編譯信息
把玩CMake的第一步
cmakeCFLAGSCXXFLAGS
CMake入門/加入編譯選項
CMakeforwindows
CMake常用指令
如何調試makefile變量
跟我一起寫Makefile:make運行
Makefile的常用技術總結
Makefile語法簡介
Makefile先編譯出so後在編譯出執行檔
利用Autotools來建立Makefile檔案
GNUMakefile雜項語法備忘
SCons筆記(詳細版)
高級Makefile技巧
Makefile條件編譯debug版和release版
Makefile範例教學
LinuxC++編譯及靜態/動態鏈接庫筆記
Makefile的基本結構
深入學習Make命令和Makefile(上)
深入學習Make命令和Makefile(下)
Makefile中的$@,$^,$與