prog2_C_intro

2007 days ago by macieksk

Ze strony http://www.programmingsimplified.com/c-program-examples przeczytajmy kilka przykładów w tym: * Fibonacci series program in c using recursion * Decimal to binary conversion (decimal to binary conversion in a string) 
       
 
       
Przeczytaj o plikach nagłówkowych: http://stackoverflow.com/questions/7109964/creating-your-own-header-file-in-c Przeczytaj wpis o kompilowaniu własnej biblioteki "shared", czyli "dynamic linking": http://peon-developments.blogspot.com/2011/07/creating-and-using-c-shared-libraries.html Następnie na podstawie przykładu Fibonacci stwórz własną bibliotekę, która zawiera jedną funkcję Fibonacci. Stwórz pliki: * libfib.h * libfib.c następnie skompiluj * libfib.so - "shared" library * libfib.o - zwykła biblioteka "staticly linked" - kompilujemy jak shared, ale bez flagi -shared Następnie napisz program testujący Twoją bibliotekę, czyli plik * main.c który zawiera funkcję main i używa funkcji z biblioteki libfib na 2 sposoby: 1. dynamicznie linkowanej (jak w przykładzie) 2. statycznie linkowanej, czyli kompiluj używając: g++ main.c libfib.o -o main.exe W przypadku 1. Twój program pewnie się nie uruchamia. Należy uruchomić go w nast. sposób: LD_LIBRARY_PATH=. ./main gdzie . to ścieżka to katalogu z libfib.so # # 
       
Na podstawie poniższego przykładu napisz prosty Makefile kompilujący Twój program Dopisz target "test", który uruchamia program. 
       
 
       
# I am a comment, and I want to say that the variable CC will be # the compiler to use. CC=g++ # Hey!, I am comment number 2. I want to say that CFLAGS will be the # options I'll pass to the compiler. CFLAGS=-c -Wall all: main.exe main.exe: main.o libfib.o $(CC) main.o libfib.o -o main.exe main.o: main.c libfib.h $(CC) $(CFLAGS) main.c libfib.o: libfib.c libfib.h $(CC) $(CFLAGS) libfib.c clean: rm -rf *o main.exe # # 
       
Przeczytaj Makefile tutorial http://mrbook.org/tutorials/make/ 
       
Przerób poniższy "generyczny" makefile tak aby działał dla biblioteki libfib.o, a nastepnie libfib.so Dopisz target "test" 
       
CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ 
       
Traceback (click to the left of this block for traceback)
...
         ???
 
       
EXE := countPQ.exe SRC := cpp SOURCES := $(wildcard *.$(SRC)) OBJS := $(patsubst %.$(SRC), %.o, $(SOURCES)) DEPS := $(patsubst %.o,%.d,$(OBJS)) #LIBS := -lboost_program_options-gcc41-d LIBS := -lboost_program_options CC := g++ -DDEBUG -g CXXFLAGS := -O2 -Wall -pipe -march=pentium4 -I../ncbi/include #-I/home/macieks/usr/include -L/home/macieks/usr/lib CFLAGS := $(CXXFLAGS) # -Wno-deprecated .PHONY: all clean alph%.swap test ## tests and experiments INFILE := MFS1_htm_trans.csv TSIZE := 5 SAMPLE := 170 ALPHABETS := $(wildcard alph*.h) RESULTS := $(patsubst alph%.h,result-$(TSIZE)-%.out,$(ALPHABETS)) #alph%.swap: alph%.h # cp countPQ.cpp countPQ.cbackup # sed -e 's/include "[^"]*" *\/\/DEADBEEF/include "'$<'" \/\/DEADBEEF/' countPQ.cpp > tmpfile~ # cat tmpfile~ > countPQ.cpp # make $(EXE) #result-$(TSIZE)-%.out: alph%.swap # cat $(INFILE) | head -n $(SAMPLE) | ./countPQ.exe $(TSIZE) > $@ all: $(EXE) clres: rm -f result-*.out # Typical make targets below %.o: %.cpp %.hpp $(CC) $(CFLAGS) -o $@ -c $< #%.o: %.cpp # $(CC) $(CFLAGS) -o $@ -c $< %.o: %.c %.h $(CC) $(CFLAGS) -o $@ -c $< countPQ.exe: countPQ.o hashRepresentation.o mult_align_stats.o alphabet.o probDFA.o AminoAcidPT.o AlignAlphPT.o $(CC) $(CFLAGS) $(LIBS) -o $@ $^ test.exe: test.o hashRepresentation.o mult_align_stats.o alphabet.o probDFA.o AminoAcidPT.o HashFA.o $(CC) $(CFLAGS) -o $@ $^ test2.o: test2.cpp HashFA.hpp $(CC) $(CFLAGS) -o $@ -c $< test2.exe: test2.o alphabet.o hashRepresentation.o probDFA.o AminoAcidPT.o HashFA.o $(CC) $(CFLAGS) -o $@ $^ %.exe: %.o $(OBJS) $(CC) $(CFLAGS) -o $@ $^ countBLOSUMcover.exe: countBLOSUMcover.cpp ../ncbi/build/raw_scoremat.o $(CC) $(CFLAGS) -o $@ $^ clean: rm -f *.o *.d *~ $(EXE) test.exe countBLOSUMcover.exe %.d: %.c $(CC) -MD -E $< > /dev/null %.d: %.cpp $(CC) -MD -E $< > /dev/null zip: zip "countPQ-`date +%Y%m%d`.zip" *.cpp *.hpp Makefile deps: $(DEPS) -include $(DEPS) 
       
http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html