160 likes | 355 Views
Practical Session 4. Preparation for Assignment 2 Topics: C++ Eclipse – On Windows. MinGW, msys, OpenCV C++ Compilation Process dos2unix, unix2dos utility makefile. Setting up our programing environment. At Home, Windows: IDE: Eclipse for C++ Compiler: MinGW, contains g++
E N D
Practical Session 4 Preparation for Assignment 2 Topics: C++ Eclipse – On Windows. MinGW, msys, OpenCV C++ Compilation Process dos2unix, unix2dos utility makefile
Setting up our programing environment • At Home, Windows: • IDE: Eclipse for C++ • Compiler: MinGW, contains g++ • Optional: Unix Like Shell: msys • For Assignment 2: OpenCV (external library) • At Labs, Linux: • http://www.cs.bgu.ac.il/~spl121/PracticalSession04
C++ Eclipse • Eclipse is just an IDE: • Integrated Development Environment • Does not provide a compiler! • Download: • Eclipse IDE for C/C++ Developers • http://www.eclipse.org/downloads/ • Install to C:\eclipse for ease of use.
g++ • We need a compiler to compile our programs! • Download MinGW: • http://sourceforge.net/projects/mingw/files/latest/download • Install: • Preferred place: c:\eclipse\MinGW\ • While installing select these components: • C++ Compiler • MinGW Development Toolkit (contains msys)
Unix like shell for Windows • Name: msys • Why use it? • Useful when testing your makefiles! • Installation: • Already done with MinGW installation. • Program path: C:\eclipse\MinGW\msys\1.0\ • Exactly like a Linux shell. Can cp, rm, mkdir, and make.
Eclipse, MinGW, msys, and $PATH • What is $PATH: • Environment variable. • Contains paths of certain programs. • Why should I care? • To let Eclipse know where is the compiler at. • Eclipse checks the $PATH variable. Not there? No compiler for eclipse! • Where is it? • Control Panel\System and Security\System\Advanced System Settings\Environment Variables\PATH • How do I change it? • Just add “C:\eclipse\MinGW\bin\;c:\eclipse\msys” to its end. • Note: Each program path must be separated by “;”.
New C++ Project • Run Eclipse • File -> New -> C++ Project • Project Name: • Name of project. • Project Type: • Executable -> Empty Project • Toolchains: • MinGW GCC • Click on Finish. • Create three directories: (good programming style!) • “src” for .cpp files. • “include” for .h files. • “bin” folder for binary (.o and .a) files.
OpenCV • What is it? • Open (Source) Computer Vision Library. • An external library. A graphical library. • Contains around 500 functions especially made for image processing. • Made originally by Intel, maintained today by willowgarage. • Homepage: • http://opencv.willowgarage.com/wiki/ • Note: • You need to use it as a Black box. • You don’t need to understand its code. • You don’t need to understand why it works. • All you need to know is how to use it! • Work with the API only! • Learn what the function needs as input. • Learn what it returns. • Learn what it does! Not how it does it!
OpenCV • Download: • http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/OpenCV-2.3.1-win-superpack.exe/download • Install path: C:\eclipse\ • It will make a directory named “opencv” under eclipse path. • API: • http://opencv.itseez.com/ • http://opencv.itseez.com/modules/refman.html
Adding OpenCV to project • After creating your project. • Goto Project -> Properties • C/C++ Build -> Settings • GCC C++ Compiler -> Includes • Under Include Path we add: • c:\eclipse\opencv\build\include • MinGW C++ Linker -> Libraries • Under Libraries we add: • CoreOpenCV libraries: • opencv_core231 • opencv_highgui231 • OtherOpenCVlibraries : • opencv_imgproc231 • opencv_calib3d231 • opencv_feature2d231 • opencv_video231 • opencv_objdetect231 • opencv_ml231 • opencv_gpu231 • Note: 231 is the library version. In this case: 2.3.1 • Under Libraries search path we add: • C:\eclipse\opencv\build\x86\mingw\lib
Windows and OpenCV • If you wish to run the executable file as a standalone, and not from eclipse. You need OpenCV’sdll files. • Copy the dll files from: C:\eclipse\opencv\build\x86\mingw\bin • To your Windows system directory: C:\Windows\system\ • Then you can run any executable program that includes OpenCV code.
C++ Compilation Process • Input: • C++ Code, .h and .cpp files. • Preprocessor: • Removes comments • interpreting special preprocessor directives denoted by #: • #include <math.h> – paste in the standard library math file. • #include "My.h" – paste in the file My.h from the same directory (relative path) • C++ Compiler: • Converts C++ code to Assembly code • What is Assembler? Programming language. Lower level than C++ • Example code: http://www.assembly.happycodings.com/code1.html • Assembler: • Converts the Assembly code to object code – “.o” files. – this is machine code. Not executable until linking is done! • Linker: • Takes several object code files, and links them together into an executable “.a” files. • Output: Executable file.
dos2unix • Why? • Linux and Windows text files are not the same! • Windows new line is \r\n • Linux new line is \n • Why should I care? • Work at home? Windows? • Work at labs? Unix? • Allows you to test your files at the Linux labs if you solved your assignment at home. • Solution? • Utility that changes the format of text files from DOS format (Windows) to Unix format (Linux). • What about the other way around? • unix2dos: converts from Linux to DOS format. • Usage: • dos2unix input.txt output.txt • Run this under usingmsys shell. • Note: • Your file format must be suitable for Linux testing environment.
makefile • What is makefile? • It is a text file called “makefile”. • Contains functions that allows us to compile c++ programs. • Why makefile? • Allows us to compile c++ programs with a single command. • How do we run it? • You use “make” program. • makecan read the makefile and run the appropriate function depending on user request. • Example: • make clean • This line runs a function named “clean”.
makefile example Comment: # All Targets Define Variables: CC, FLAGS, … Use Variables: $(CC), $(FLAGS) Function definition: clean: Function with dependencies: all: run Dependencies mean that you run the functions that your function depends on, then your function after. Printing to shell: @echo ‘Building target: run’ $<: the first item in the dependencies list for this function: 1st $< is src/imageloader.cpp 2nd $< is src/run.cpp -o $@: the output file name is the function name. 1st –o $@ is run 2nd –o $@ is imageloader.o 3rd -o $@ is run.o # define some Makefile variables for the compiler and compiler flags # to use Makefile variables later in the Makefile: $() CC = g++ CFLAGS = -g -Wall OBJECT_FILES = run.oimageloader.o INCLUDE_LIBRARIES = -I/usr/local/include/opencv -I/usr/local/include SHARED_LIBRARIES = -L/usr/local/lib OPENCV_LIBS = -lopencv_core -lopencv_highgui # All Targets all: run # Tool invocations # Executable "run" depends on the files imageloader.o and run.o. run: $(OBJECT_FILES) @echo 'Building target: run' @echo 'Invoking: C++ Linker' $(CC) $(CFLAGS) $(OBJECT_FILES) -o $@ $(INCLUDE_LIBRARIES) $(SHARED_LIBRARIES) $(OPENCV_LIBS) @echo 'Finished building target: run' @echo ' ' # Depends on the source and header files imageloader.o: src/imageloader.cpp include/imageloader.h $(CC) $(CFLAGS) $< -c -o $@ $(INCLUDE_LIBRARIES) $(SHARED_LIBRARIES) $(OPENCV_LIBS) # Depends on the source and header files run.o: src/run.cpp $(CC) $(CFLAGS) $< -c -o $@ $(INCLUDE_LIBRARIES) $(SHARED_LIBRARIES) $(OPENCV_LIBS) #Clean the build directory clean: rm-rf *.o run