Question: Hi,

I want to try out Velvet-SC in the context of single cell genome assemblies.

I downloaded the source code from [their website][1].

[1]: http://bix.ucsd.edu/projects/singlecell/

However, when I try to compile it (using the arguments I also use for standard velvet, e.g "CATEGORIES=6", "MAXKMERLENGTH=120", "BIGASSEMBLY=1", "OPENMP=1"), I get a lot of errors and the make script exits with "Error 1"

This is the output i get when running make:

```
MP=1'
rm obj/*.o obj/dbg/*.o
rm: cannot remove 'obj/dbg/*.o': No such file or directory
make: [cleanobj] Error 1 (ignored)
cd third-party/zlib-1.2.3; ./configure; make; rm minigzip.o; rm example.o
Checking for gcc...
Building static library libz.a version 1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.
make[1]: Entering directory `/home/user/Downloads/velvet-sc/third-party/zlib-1.2.3'
gcc -O3 -DUSE_MMAP -c -o example.o example.c
gcc -O3 -DUSE_MMAP -c -o adler32.o adler32.c
gcc -O3 -DUSE_MMAP -c -o compress.o compress.c
gcc -O3 -DUSE_MMAP -c -o crc32.o crc32.c
gcc -O3 -DUSE_MMAP -c -o gzio.o gzio.c
gcc -O3 -DUSE_MMAP -c -o uncompr.o uncompr.c
gcc -O3 -DUSE_MMAP -c -o deflate.o deflate.c
gcc -O3 -DUSE_MMAP -c -o trees.o trees.c
gcc -O3 -DUSE_MMAP -c -o zutil.o zutil.c
gcc -O3 -DUSE_MMAP -c -o inflate.o inflate.c
gcc -O3 -DUSE_MMAP -c -o infback.o infback.c
gcc -O3 -DUSE_MMAP -c -o inftrees.o inftrees.c
gcc -O3 -DUSE_MMAP -c -o inffast.o inffast.c
ar rc libz.a adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
gcc -O3 -DUSE_MMAP -o example example.o -L. libz.a
gcc -O3 -DUSE_MMAP -c -o minigzip.o minigzip.c
gcc -O3 -DUSE_MMAP -o minigzip minigzip.o -L. libz.a
make[1]: Leaving directory `/home/user/Downloads/velvet-sc/third-party/zlib-1.2.3'
mkdir -p obj
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/tightString.c -o obj/tightString.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/run.c -o obj/run.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/splay.c -o obj/splay.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/splayTable.c -o obj/splayTable.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/graph.c -o obj/graph.o
src/graph.c: In function 'addBufferToDescriptor':
src/graph.c:870:14: warning: variable 'twinDescr' set but not used [-Wunused-but-set-variable]
Descriptor *twinDescr;
^
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/run2.c -o obj/run2.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/fibHeap.c -o obj/fibHeap.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/fib.c -o obj/fib.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/concatenatedGraph.c -o obj/concatenatedGraph.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/passageMarker.c -o obj/passageMarker.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/graphStats.c -o obj/graphStats.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/correctedGraph.c -o obj/correctedGraph.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/dfib.c -o obj/dfib.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/dfibHeap.c -o obj/dfibHeap.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/recycleBin.c -o obj/recycleBin.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/readSet.c -o obj/readSet.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/shortReadPairs.c -o obj/shortReadPairs.o
src/shortReadPairs.c: In function 'pushNeighbours':
src/shortReadPairs.c:928:8: warning: variable 'lastCandidate' set but not used [-Wunused-but-set-variable]
Node *lastCandidate = NULL;
^
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/locallyCorrectedGraph.c -o obj/locallyCorrectedGraph.o
src/locallyCorrectedGraph.c: In function 'tourBusNode_local':
src/locallyCorrectedGraph.c:380:8: warning: variable 'destination' set but not used [-Wunused-but-set-variable]
Node *destination;
^
src/locallyCorrectedGraph.c: In function 'clipTipsVeryHardLocally':
src/locallyCorrectedGraph.c:427:18: warning: variable 'twin' set but not used [-Wunused-but-set-variable]
Node *current, *twin;
^
src/locallyCorrectedGraph.c: In function 'correctGraphLocally':
src/locallyCorrectedGraph.c:517:8: warning: variable 'index' set but not used [-Wunused-but-set-variable]
IDnum index, nodeIndex;
^
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/graphReConstruction.c -o obj/graphReConstruction.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/roadMap.c -o obj/roadMap.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/preGraph.c -o obj/preGraph.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/preGraphConstruction.c -o obj/preGraphConstruction.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/concatenatedPreGraph.c -o obj/concatenatedPreGraph.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/readCoherentGraph.c -o obj/readCoherentGraph.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/crc.c -o obj/crc.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/utility.c -o obj/utility.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/kmer.c -o obj/kmer.o
gcc -Wall -O3 -D MAXKMERLENGTH=120 -D CATEGORIES=6 -c src/scaffold.c -o obj/scaffold.o
gcc -Wall -O3 -lm -o velveth obj/tightString.o obj/run.o obj/recycleBin.o obj/splay.o obj/splayTable.o obj/readSet.o obj/crc.o obj/utility.o obj/kmer.o third-party/zlib-1.2.3/*.o
obj/readSet.o: In function `convertConfidenceScores':
readSet.c:(.text+0x3c47): undefined reference to `pow'
readSet.c:(.text+0x3c8a): undefined reference to `pow'
collect2: error: ld returned 1 exit status
make: *** [velveth] Error 1
```

Any Ideas/Suggestions?

Answer: The significant problem is here:

```
gcc \
-Wall \
-O3 \
-lm \
-o velveth \
obj/tightString.o \
obj/run.o \
obj/recycleBin.o \
obj/splay.o \
obj/splayTable.o \
obj/readSet.o \
obj/crc.o \
obj/utility.o \
obj/kmer.o \
third-party/zlib-1.2.3/*.o
```

Find the link commands in the Makefile, and move `-lm` to the end of the line.

You can arrange this at the top of the Makefile by removing `-lm` from `LDFLAGS` and adding it to `Z_LIB_FILES` instead. (Wow, that's forked from a prehistoric version of velvet!)