Homework 2

Computer Architecture I ShanghaiTech University
HW1 (in Autolab)    HW2 HW3

Task 1: Doubly Linked Lists in C


Implement a doubly linked list in C. See the header file doubll.h for specifics.Implement the code in a file called "doubll.c".

Your submission should only include the source code for the Doubly Linked List, doubll.c. Any other file found will directly result in a grade of 0. We will NOT be using your copy of the header file or Makefile.

Compilation of the source code requires no errors or warnings and conformity to the C89 standard. The Makefile syntax is given below.

CFLAGS=-Wpedantic -Wall -Wextra -Werror -std=c89

doubll.o: doubll.c doubll.h
  ${CC} ${CFLAGS} doubll.c -o doubll.o

The above compilation requires a main function. However, your submission should NOT include any main function.

We will test your program using the functions declared in the header file provided as well as some other functions defined by us. The output of the individual test cases will NOT be given in auto-grader and any attempt at retrieving the test cases or the program outputs will be seen as plagiarism.

Consider Learning Before You Start

Implementation details

You are required to implement doubly linked list with following rules:


Refer to the submission section at the end.

Task 2: Libraries

For all tasks assume that doubll.h will be provided in the working directory and your doubll.c will be copied to the current working directory.

Task 2.1: Static Library


Write a shell script named staticlib.sh that when invoked, produces a static library named liblist.a from the source files doubll.c and doubll.h.

Then create a static-linked executable staticlist from liblist.a and test.c. Do not execute the program in the shell script.

Hint: use the command ar to create the static library. Then use the command ld to create the executable file.


Write a shell script named dynamiclib.sh that when invoked, produces a dynamic-linked library named liblist.so from doubll.c.

Then generate an executable named dynamiclist using liblist.so as well as test.c. Do not execute the program in the shell script.


You should submit a compressed file named as hw2.tar to autolab.

The directory tree of your submission should look like the following :

├── doubll.c
├── dynamiclib.sh
└── staticlib.sh

Note: Autolab grading results:

Note: your submission should NOT contain main() function

Test Environment

The test environment on autolab is Ubuntu 16.04 with gcc 5.x

Last Modified: Feb. 27th, 2019