mothur v1.12 compile error

64-bit Linux, OpenMPI 1.4.2
mothur v1.11 builds without problems, but compiling v1.12 in the same environment results in:

mpic++ -O3 -DBIT_VERSION -mtune=native -march=native -m64 -DUSE_READLINE -DUSE_MPI -I.   -c -o aligncommand.o aligncommand.cpp

aligncommand.cpp: In member function 'virtual int AlignCommand::execute()':
aligncommand.cpp:300: error: no match for 'operator=' in 'MPIPos = setFilePosFasta(std::string, int&)(((int&)(& numFastaSeqs)))'
/usr/lib64/gcc/x86_64-slackware-linux/4.4.4/../../../../include/c++/4.4.4/bits/vector.tcc:156: note: candidates are: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = long int, _Alloc = std::allocator<long int>]
make: *** [aligncommand.o] Error 1

I verified that the same flags were used in compiling aligncommand.cpp in v.1.11 and v1.12.


/ ct

Sorry about that. We changed the data type of our file position variable to accommodate the large file sizes some mothur users are running and must have missed one in the MPI version. :oops: . I have made the changes to the mothur source code and reposted it to the wiki. Thanks for your help in finding this.

I’m trying to install mothur v12.0 on a cluster and I get the following error:

c++ -O3 -O3 -DBIT_VERSION -I. -arch x86_64 -c -o alignment.o alignment.cpp
icpc: command line warning #10006: ignoring unknown option ‘-arch’
icpc: error #10236: File not found: ‘x86_64’

I’ve enabled mpi, readline, and 64-bit in the makefile…any suggestions as to what is the problem?


Try commenting out TARGET_ARCH += -arch x86_64 and changing CXXFLAGS += -DBIT_VERSION to CXXFLAGS += -DBIT_VERSION -mtune=native -march=native -m64

Thanks, I confirmed this is fixed in v1.12.1.

/ ct

I am trying to compile v1.12.3 on ubuntu 10.04 x64 but having trouble. I did not have issues compiling v1.11 with all readline, mpi features enabled. Could anyone post a simple how-to for this?


Except for the original 1.12 version that had other issues, these are the three lines I need to change from the default v1.12.x makefiles when building on 64bit Slackware Linux 13.1 with readline and MPI support (OpenMPI 1.4.2):

64BIT_VERSION ?= yes
TARGET_ARCH += -mtune=native -march=native -m64
USEMPI ?= yes

The compiler output should look similar to:

mpic++ -O3 -DBIT_VERSION -DUSE_READLINE -DUSE_MPI -I.  -mtune=native -march=native -m64 -c -o whittaker.o whittaker.cpp
mpic++ -lreadline -lncurses -mtune=native -march=native -m64 -o mothur ace.o aligncommand.o alignment.o alignmentcell.o ...

My entire makefile is attached for reference.

One other note on Linux executables (not sure how the specifics translate to other platforms). By default, the executable will have the debugging symbols left in. If you are using MPI with many processors, you may want to strip the debugging symbols out, resulting in a smaller executable and (possibly) performance improvements.

# ls -l mothur
5707818 2010-08-11 08:55 mothur
# file mothur
mothur: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
# strip mothur
# ls -l mothur
5428360 2010-08-11 08:58 mothur
# file mothur
mothur: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), stripped

We added the strip command to the makefile for mothur in version 1.15.0.

I am trying to compile mothur 1.18.1 on our linux cluster and I keep getting the error:

mpic++: command not found

Can someone help me figure out what I need to do?


The error you are getting indicates you are compiling with USEMPI ?= yes, and mothur can’t find the mpi compiler.