[Users] Error on the linking phase on compilation in a virtual environment

José Ferreira jpmferreira at ua.pt
Wed Jun 12 09:51:13 CDT 2024


Dear toolkit users and developers,


With the latest update of GCC to version 14, there is a known error that 
prevents the compilation from taking place, preventing me from compiling 
the toolkit.

I’ve been trying to do something which I probably should have some time 
ago to avoid this kind of issues, while also granting some portability 
between machines, which is to setup a virtual environment using Conda to 
compile the toolkit.


I am sending you this e-mail because I’ve failed to compile the toolkit 
in a virtual environment, where I am currently stuck with an error 
during the linking phase. Before the update to GCC 14, and without the 
virtual environment, I was able of compiling the toolkit without any issue.

Here are the steps that I have performed:

 1.

    Activate an empty virtual environment managed by a conda (or a
    drop-in replacement) with the conda-forge repository configured

 2.

    |conda install gcc gxx gfortran openmpi openmpi-mpicc openmpi-mpicxx
    openmpi-mpifort binutils|

 3.

    Compile the toolkit with an empty thornlist, attached in |empty.th|,
    and an option file that points towards the virtual environment that
    is activated, attached in |venv.cfg|

 4.

    Get the following error from |ld| (the full log for making the
    config and the binary are attached in |cactus_empty.log|)

|Creating cactus_empty in /home/undercover/projects/cactus/exe from 
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld: 
unrecognised emulation mode: arch=native Supported emulations: 
elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu make[1]: *** 
[/home/undercover/projects/cactus/lib/make/make.configuration:150: 
/home/undercover/projects/cactus/exe/cactus_empty] Error 1 make: *** 
[Makefile:265: empty] Error 2 |


To me, the previous error indicates that something is passing the wrong 
flags to |ld|, because even if the emulation mode was not recognized it 
should give the error |ld: unrecognised emulation mode: <something>| 
instead of |ld: unrecognised emulation mode: arch=<something>|.

Removing the flag |-march=native| from the compilers confirms my guess 
by revealing a different error at the same stage

|Creating cactus_empty in /home/undercover/projects/cactus/exe from 
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld: 
unrecognized option '-DMPICH_IGNORE_CXX_SEEK' 
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld: use 
the --help option for usage information make[1]: *** 
[/home/undercover/projects/cactus/lib/make/make.configuration:150: 
/home/undercover/projects/cactus/exe/cactus_empty] Error 1 make: *** 
[Makefile:265: empty] Error 2 |

and if I were to remove the corresponding flag in the config file, |ld| 
will complain about something else.

It really seems like something is passing the flags onto |ld| where it 
shouldn’t, but I cannot tell who and where.


I should note that compiling very basic programs in C in the virtual 
environment doesn’t raise any issues, although I haven’t tested it very 
thoroughly.

Please do let me know if you have any issues in rendering this e-mail!


Best regards,

José Ferreira


​
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.einsteintoolkit.org/pipermail/users/attachments/20240612/a89105e6/attachment-0001.htm>
-------------- next part --------------
!CRL_VERSION = 1.0

!DEFINE ROOT = Cactus
!DEFINE ARR  = $ROOT/arrangements
!DEFINE COMPONENTLIST_TARGET = $ROOT/thornlists/

!DEFINE ET_RELEASE = ET_2023_05
-------------- next part --------------
# Cactus configuration for virtual environments managed by conda
# change libraries location to match your virtual environment below!

# list of conda packages installed from conda-forge:
# - binutils
# - libjpeg-turbo
# - gsl
# - hdf5
# - openmpi openmpi-mpicc openmpi-mpicxx openmpi-mpifort
# - gcc gxx gfortran

## Decide which flags will be used at compile-time
OPTIMISE = yes
WARN     = yes
DEBUG    = no
PROFILE  = no
OPENMP   = yes

## Preprocessors and Compilers
CPP = cpp
FPP = cpp
CC  = gcc
CXX = g++
F77 = gfortran
F90 = gfortran

## Default flags
CPPFLAGS = -DMPICH_IGNORE_CXX_SEEK
FPPFLAGS = -traditional
CFLAGS   = -g3 -march=native -std=gnu99
CXXFLAGS = -g3 -march=native -std=gnu++0x
F77FLAGS = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none -fno-range-check
F90FLAGS = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none -fno-range-check
LDFLAGS  = -rdynamic

## Optimization flags
CPP_OPTIMISE_FLAGS = -DKRANC_VECTORS # -DCARPET_OPTIMISE -DNDEBUG
FPP_OPTIMISE_FLAGS =                 # -DCARPET_OPTIMISE -DNDEBUG
C_OPTIMISE_FLAGS   = -Ofast
CXX_OPTIMISE_FLAGS = -Ofast
F77_OPTIMISE_FLAGS = -Ofast
F90_OPTIMISE_FLAGS = -Ofast

## Warning flags
CPP_WARN_FLAGS = -Wall
FPP_WARN_FLAGS = -Wall
C_WARN_FLAGS   = -Wall
CXX_WARN_FLAGS = -Wall
F77_WARN_FLAGS = -Wall
F90_WARN_FLAGS = -Wall

## Debug flags
CPP_DEBUG_FLAGS = -DCARPET_DEBUG -fsanitize=undefined -fsanitize=thread
FPP_DEBUG_FLAGS = -DCARPET_DEBUG -fsanitize=undefined -fsanitize=thread
C_DEBUG_FLAGS   = -O0            -fsanitize=undefined -fsanitize=thread
CXX_DEBUG_FLAGS = -O0            -fsanitize=undefined -fsanitize=thread
F77_DEBUG_FLAGS = -O0            -fsanitize=undefined -fsanitize=thread
F90_DEBUG_FLAGS = -O0            -fsanitize=undefined -fsanitize=thread

## Code profiling flags
CPP_PROFILE_FLAGS =
FPP_PROFILE_FLAGS =
C_PROFILE_FLAGS   = -pg
CXX_PROFILE_FLAGS = -pg
F77_PROFILE_FLAGS = -pg
F90_PROFILE_FLAGS = -pg

## OpenMP
CPP_OPENMP_FLAGS = -fopenmp
FPP_OPENMP_FLAGS = -fopenmp
C_OPENMP_FLAGS   = -fopenmp
CXX_OPENMP_FLAGS = -fopenmp
F77_OPENMP_FLAGS = -fopenmp
F90_OPENMP_FLAGS = -fopenmp

## Libraries location
LIBDIRS      =   # ?
MPI_DIR      = /home/undercover/.micromamba/envs/phd/
HDF5_DIR     = /home/undercover/.micromamba/envs/phd/
GSL_DIR      = /home/undercover/.micromamba/envs/phd/
HWLOC_DIR    = /home/undercover/.micromamba/envs/phd/
PTHREADS_DIR = /home/undercover/.micromamba/envs/phd/
LIBJPEG_DIR  = /home/undercover/.micromamba/envs/phd/
LIBS              = gfortran open-pal z # ?
C_LINE_DIRECTIVES = yes                 # ?
F_LINE_DIRECTIVES = yes                 # ?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cactus_empty.log
Type: text/x-log
Size: 10633 bytes
Desc: not available
URL: <http://lists.einsteintoolkit.org/pipermail/users/attachments/20240612/a89105e6/attachment-0001.bin>


More information about the Users mailing list