Frequently Asked Questions — ViennaRNA Package

# 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…

Link Time Optimization