系統程式的第一個作業是寫一個學號判斷的程式

作業的功能部份不會說很難 

主要是要熟悉並學習以下幾個能力:

1.在Linux 環境下編輯程式

2.標頭檔的使用方式

3.將程式功能分割為不同.c檔(Object-Orient Programming的基礎概念)

4.Makefile的使用及寫法

在做這次作業首要遇到的問題就是原本在XP下想先把功能寫好

但卻遇到 main與其他程式link錯誤的問題  一直以為是引入方式錯誤

後來才發現在XP下 程式除了用include"檔名"之外 還必須去更改compiler(Dev-C++)的連結選項...囧

為了這問題搞了很久

至於像Makefile的編寫 之前寒假有先練習相關的東西  這次作業增加了練習的機會

在製作shared library所用的Makefile時 原本想用比較精簡的方式 但Linux似乎沒辦法

我的Makefile:

#program name
PROGRAM = b933040038_hw1_2
#compiler
CC = gcc
#compliler flag
CFLAGS = -O2
#main
MAIN = main.c
#source  (fun1,fun2)
SRCS = fun1.c fun2.c
#objects
OBJS = $(SRCS:.c=.o)
#libraries
LIBS = libfun1.so libfun2.so
LIBS1 = $(LIBS:.so=.so.1)
#library path
LIB_PATH= /usr/lib/
#remove
RM = rm

all: $(PROGRAM)
 
$(PROGRAM): $(OBJS)
    $(CC) $(CFLAGS) -o $(PROGRAM) $(MAIN) -lfun1 -lfun2

$(OBJS): $(SRCS) hw1.h
    $(CC) -fPIC -c -Wall $(SRCS)
    $(CC) -shared -Wl,-soname,libfun1.so -o libfun1.so.1 fun1.o -lc
    ln -s libfun1.so.1 libfun1.so
    $(CC) -shared -Wl,-soname,libfun2.so -o libfun2.so.1 fun2.o -lc
    chmod 444 $(LIBS1)
    ln -s libfun2.so.1 libfun2.so
    cp $(LIBS) $(LIB_PATH)
clean:
    $(RM) -rf $(PROGRAM) *.o *.core *.so *so.1
------------------------------------------------------------------------------------------
紅色部份我原本是想改成

$(CC) -shared -Wl,-soname,$(LIBS) -o $(LIBS1) $(OBJS) -lc

也就是一次把fun1跟fun2的share library做出來

不過他不給用..之後有空再找原因...<囧>

創作者介紹
創作者 molimomo 的頭像
molimomo

Humdrum Moli...

molimomo 發表在 痞客邦 留言(0) 人氣()