Frequently Asked Questions
Missing EXTERN.h
When compiling from source at the Mac OS X platform, users often encounter
an error message stating that the file EXTERN.h
is missing for compilation
of the Perl 5
wrapper. This is a known problem and due to the fact that
users are discouraged to use the Perl 5
interpreter that is shipped with Mac OS X.
Instead, one should install a more recent version from another source, e.g. homebrew
.
If, however, for any reason you do not want to install your own Perl 5
interpreter
but use the one from Apple, you need to specify its include path to enable building the
ViennaRNA Perl interface. Otherwise, the file EXTERN.h
will be missing at compile time.
To fix this problem, you first need to find out where EXTERN.h
is located:
sudo find /Library -type f -name EXTERN.h
Then choose the one that corresponds to your default perl interpreter (find out the version
number with perl -v | grep version
), simply execute the following before running the
./configure
script, e.g.:
export CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE
if your default perl is v5.18 running on MacOSX10.15. Change the paths according to your
current setup. After that, running ./configure
and compilation should run fine.
See also…
Related question at stackoverflow: https://stackoverflow.com/q/52682304/18609162
Linking fails with LTO error
By default, RNAlib is compiled with Link Time Optimization.
This may introduce problems upon linking a third-party program that was either compiled
with a different compiler or compiler version. As a work-around solution, we include the
-fno-lto
linker flag in the output of the pkg-config.
This tells the linker to not perform link time optimization even though LTO code is
included in the library. Usually, this should not affect the runtime of the algorithms
too much.
However, some linkers may not support the -fno-lto
flag and fail at the linker stage.
In addition, if RNAlib has been compiled with clang
, it may not include the non-LTO
code required for linking without LTO. To resolve this issue, you may need to deactivate
link time optimization while building RNAlib.
See also…