# cxx11 error with antibody modelling

7 posts / 0 new
cxx11 error with antibody modelling
#1

Dear all,

I built the last release 2017.08 recently. I have not encountered any error during the build. Here is the command I ran:

./scons.py -j8 mode=release bin extras=cxx11 extras=mpi

I have gcc version 5.4.0 so according to build tutorial this should new enough to have C++11 support.

But when I am running antibody.linuxrelease as according to the protocol on

I am receiving an error about the antibody module need gcc-4.9+ or clang-3.6+ compiler with extras=cxx11 option.  I have checked relevant problems in the forum but I was not able to find anything helpful.

I have also used the rosetta_compiler_test.py to check the gcc on my PC.

Testing compiler 'gcc', reporting as:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Main tests:

AUTO:                   	Pass.
BIND:                   	<<<FAILED!>>>
CHRONO:                 	<<<FAILED!>>>
DELEGATING CONSTRUCTORS:	Pass.
DELETED CONSTRUCTORS:   	Pass.
IN-CLASS INITIALIZATION:	Pass.
INHERITING CONSTRUCTORS:	Pass.
INITIALIZER LIST:       	<<<FAILED!>>>
LAMBDA:                 	<<<FAILED!>>>
MAP AT():               	<<<FAILED!>>>
MOVE:                   	Pass.
NULLPTR:                	Pass.
OVERRIDE:               	<<<FAILED!>>>
RANGE FOR:              	<<<FAILED!>>>
SMART POINTERS:         	<<<FAILED!>>>
UNORDERED MAP:          	<<<FAILED!>>>

Optional tests (not needed for standard compiles, but for extra features like multithreading):

ATOMIC:                 	Pass.
CONDITION VARIABLE:     	<<<FAILED!>>>
MUTEX:                  	<<<FAILED!>>>
REGEX:                  	<<<FAILED!>>>

Summary:
Main Tests:             	7 of 16 passed
Optional Tests:         	2 of 6 passed

Sorry, your compiler has issues which prevent it from compiling Rosetta - try updating your compiler or altering settings.


while I get this when I try with g++

Testing compiler 'g++', reporting as:
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Main tests:

AUTO:                   	Pass.
BIND:                   	Pass.
CHRONO:                 	Pass.
DELEGATING CONSTRUCTORS:	Pass.
DELETED CONSTRUCTORS:   	Pass.
IN-CLASS INITIALIZATION:	Pass.
INHERITING CONSTRUCTORS:	Pass.
INITIALIZER LIST:       	Pass.
LAMBDA:                 	Pass.
MAP AT():               	Pass.
MOVE:                   	Pass.
NULLPTR:                	Pass.
OVERRIDE:               	Pass.
RANGE FOR:              	Pass.
SMART POINTERS:         	Pass.
UNORDERED MAP:          	Pass.

Optional tests (not needed for standard compiles, but for extra features like multithreading):

ATOMIC:                 	Pass.
CONDITION VARIABLE:     	Pass.
MUTEX:                  	Pass.
REGEX:                  	Pass.

Summary:
Main Tests:             	16 of 16 passed
Optional Tests:         	6 of 6 passed

Congratulations! Your compiler should support Rosetta!


I do not know what I am doing wrong, or what I have is making sense. Probably I am missing a some computational knowledge here. I would really appreciate any kind of help.

Kind regards

bogac

Category:
Post Situation:
Wed, 2017-03-08 09:14
bogac

Shortly after the Rosetta 3.7 release we switched over to requiring C++11 for everything, so for the 2017.08 weekly release the "extras=cxx11" is actually superflous. If you get Rosetta to compile at all, it should be compiled with C++11 support.

"gcc" as a command (versus GCC as a program package) is a C compiler by default, and it's g++ which is the C++ compiler. Not suprisingly, a plain C compiler doesn't support C++11, so the errors there are not a concern. What you should be looking at is the g++ results, which look okay.

One possible problem is that that you're doing an MPI compile. When you do an MPI compile, you use a different compiler. Which compiler you use depends on the system, but it's normally something like mpiCC or mpicxx -- when you did your scons command, the command being used should be printed. Try running  something like mpiCC --version or mpicxx --version and see what version numbers you get. You can also try passing mpiCC or mpicxx to  rosetta_compiler_test.py and seeing how they behave.

But I'm a little confused at the error message you say you're getting. From what I can tell, you shouldn't be getting that with the 2017.08 weekly (even if you used the wrong compiler).  Are you sure you're using the correct version of Rosetta with your runs? Is there another version of Rosetta that you might be mixing it up with?

Wed, 2017-03-08 09:37
rmoretti

We have the same problem, I downloaded Rosetta 3.8 from the website (Linux 64bit binaries) and tried to run the worked example from the 2017 paper on a Centos 7 machine.

The error I get is this when running the antibody program is

ERROR: ERROR: Your compiler does not have full support for C++11 regex, and therefore can't support RegEx_based_CDR_Detector/antibody grafting.

ERROR:: Exit from: src/protocols/antibody/grafting/regex_based_cdr_detection.cc line: 75.

After checking I saw that the rosetta binary was complied against gcc 4.8 and so that might have been the issue so I downloaded gcc-6.2 using the devtoolset collection and recompiled Rosetta using gcc6.2 after checking that this version was compatible using the rosetta_compiler_test.py script which passed everything and double checking with "g++ —version" shows that the ‘found’ g++ version should be 6.2

I recompiled rosetta (scons.py -j 4 mode=release bin0 and checked that the created binaries pointed to the gcc/6.2 directory.

however antibody fails with the same error as before.

ERROR: ERROR: Your compiler does not have full support for C++11 regex, and therefore can't support RegEx_based_CDR_Detector/antibody grafting.

ERROR:: Exit from: src/protocols/antibody/grafting/regex_based_cdr_detection.cc line: 75

/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libprotocols_d.5.so(print_backtrace(char const*)+0x2b) [0x7f79e36d207b]

/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libutility.so(utility::exit(std::string const&, int, std::string const&, int)+0x15c) [0x7f79d82ef27c]

antibody.linuxgccrelease() [0x414ed9]

antibody.linuxgccrelease() [0x41299c]

/lib64/libc.so.6(__libc_start_main+0xf5) [0x7f79d62e2b35]

antibody.linuxgccrelease() [0x412d3c]

caught exception

[ERROR] EXCN_utility_exit has been thrown from: src/protocols/antibody/grafting/regex_based_cdr_detection.cc line: 75

ERROR: ERROR: Your compiler does not have full support for C++11 regex, and therefore can't support RegEx_based_CDR_Detector/antibody grafting.

Looking at the rosetta bin directory show that the binaries are linked to a directory that has been created using the 6.2 version of gcc.

I wondered if

a) it would be possible to change the Linux-x64 download version to one that included a working version of rosetta.antibody (probably most useful)

b) you could provide instructions on how to compile a working version of rosetta.antibody since it seems I have a compatible gcc but it is not being recognized as such when it comes to compiling that part of the code.

Thanks

Thu, 2017-04-27 20:26
eldrich

Strictly speaking, the regex functionality is controlled by the C++ standard library, rather than the compiler proper. With GCC, the two are normally kept in sync, but I don't know if you have an installation of GCC which is using a version of the C++ standard library that doesn't have full regex support. Was there anything strange which happened during the installation which would indicate that things are installed differently.

The other thing you might want to try is copying Rosetta/main/source/tools/build/site.settings.killdevil to Rosetta/main/source/tools/build/site.settings  and recompiling. There might be an issue with getting scons to see the path to the GCC 6.2 compiler (seeing the wrong version). The "killdevil" settings should help if it's a path issue.

Mon, 2017-05-01 12:54
rmoretti

Ok, I tried using the site.settings.killdevel and recompiled everything, no errors message popped up during the recompile and new binaries were produce.

Unfortunately it hasn't changed anything I still get:

antibody.linuxgccrelease -fasta antibody_chains.fasta

ERROR: ERROR: Your compiler does not have full support for C++11 regex, and therefore can't support RegEx_based_CDR_Detector/antibody grafting.
ERROR:: Exit from: src/protocols/antibody/grafting/regex_based_cdr_detection.cc line: 75

/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libprotocols_d.5.so(print_backtrace(char const*)+0x2b) [0x7f2a292e207b]
/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libutility.so(utility::exit(std::string const&, int, std::string const&, int)+0x15c) [0x7f2a1deff27c]
/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libprotocols.6.so(protocols::antibody::grafting::RegEx_based_CDR_Detector::detect_heavy_chain(protocols::antibody::grafting::AntibodySequence&)+0xb1b) [0x7f2a2a1bd47b]
/home/programs/rosetta/rosetta_bin_linux_2017.08.59291_bundle/main/source/build/src/release/linux/3.10/64/x86/gcc/6.2/default/libprotocols.6.so(protocols::antibody::grafting::RegEx_based_CDR_Detector::detect(protocols::antibody::grafting::AntibodySequence&)+0x1e0) [0x7f2a2a1bda20]
antibody.linuxgccrelease() [0x414ed9]
antibody.linuxgccrelease() [0x41299c]
/lib64/libc.so.6(__libc_start_main+0xf5) [0x7f2a1bef2b35]
antibody.linuxgccrelease() [0x412d3c]
^[[Ocaught exception

[ERROR] EXCN_utility_exit has been thrown from: src/protocols/antibody/grafting/regex_based_cdr_detection.cc line: 75
ERROR: ERROR: Your compiler does not have full support for C++11 regex, and therefore can't support RegEx_based_CDR_Detector/antibody grafting.

A bit more checking and it seems it is picking up the 'wrong' version of libstc++

ldd antibody

gives a lot of compiled rosetta libs and then:

libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f87f840b000)
libm.so.6 => /lib64/libm.so.6 (0x00007f87f8109000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f87f7ef2000)
libc.so.6 => /lib64/libc.so.6 (0x00007f87f7b31000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f87f792a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8806f5f000)(0x00007f87f9697000)

So I think I need to either compile it static with 6.2 or get it to find the 6.2 libstdc++ instead, it's certainly turning out pretty ackward although I am still suprised that the standard Centos libstdc++ isn't owrking with the downloaded rosetta - perhaps the rosetta download should be static too?

Thanks

Wed, 2017-05-03 00:13
eldrich

However I think the real solution is not to continue with gcc 6.2 but to figure out why the downloaded Rosetta 3.8 antibody program compiled with gcc 4.8 isn't working on Centos7? Has anyone managed to get it run and if so what is the output from running ldd on the binary?

I'm wondering if it was compiled with a c++11 libc available and so that is why it is unhappy for me - can anyone say on what OS and with what compilers the 3.8 download was made with as they might help?

I also wonder if the download antibody program should be compiled static as I am sure many other people wil have the same issues I am.

Or anyone else got any other good suggestions?

Wed, 2017-05-03 07:33
eldrich

Ok, after a number of trials we appear to have this working,

A quick summary for getting antibody working on Centos7.

i) Install the devtoolset-6 (gcc6)

iii) Edit main/source/tools/build/basic.settings and add the following flags to settings:base:overrides

"cc" : "/opt/rh/devtoolset-6/root/usr/bin/gcc",

"cxx" : "/opt/rh/devtoolset-6/root/usr/bin/g++",

iv) activate the devtoolset (scl enable devtoolset-6 bash)

v) compile rosetta (./scons.py  mode=release --clean; ./scons.py -j 4 mode=release bin)

and this *should* build a rosetta version that uses gcc 6.2 and allow the antibody routines to work.

Fri, 2017-05-26 06:40
eldrich