Idioma: Español | English
Esta guía cubre la instalación de Aleph-w desde el código fuente usando CMake.
- Prerrequisitos
- Instalación en Linux
- Compilación desde el código fuente
- Configuración avanzada
- Verificación
- Solución de problemas
Aleph-w requiere un compilador moderno con soporte completo de C++20 (C++17 y C++23 también están soportados):
| Compilador | Versión mínima | Versiones probadas | Estado |
|---|---|---|---|
| GCC | 11.0 | 11, 12, 13 | ✅ Soportado |
| Clang | 14.0 | 14, 15, 16 | ✅ Soportado |
| MSVC | - | - | ❌ No soportado |
- CMake 3.18+ (3.21+ si usas
CMakePresets.json) - Make o Ninja (Ninja recomendado)
Esta rama enlaza contra:
| Librería | Paquete (Ubuntu/Debian) | Propósito |
|---|---|---|
| GMP + gmpxx | libgmp-dev |
enteros/racionales multiprecisión (incluye bindings C++) |
| MPFR | libmpfr-dev |
punto flotante multiprecisión |
| GSL (+ gslcblas) | libgsl-dev |
RNG/estadística usada por estructuras/algoritmos aleatorizados |
| X11 | libx11-dev |
dependencia de enlace |
Threads (pthreads) son requeridos y normalmente vienen con la libc del sistema (no suele hacer falta un paquete aparte).
| Librería | Paquete | Propósito |
|---|---|---|
| GoogleTest | libgtest-dev |
tests (auto-fetch si no está instalado) |
Auto-fetch de GoogleTest requiere acceso a red; usa -DALEPH_FETCH_GTEST=OFF para desactivarlo (y/o -DBUILD_TESTS=OFF).
Nota: Las siguientes dependencias ya no son necesarias:
(removidas)autosprintf/gettext(removida)nana(removida)m4(ya no se usa Imakefile/xmkmf)xutils-dev
sudo apt-get update
# Compilador (elige uno)
sudo apt-get install -y g++ # GCC
sudo apt-get install -y clang # Clang (alternativa)
# Herramientas
sudo apt-get install -y cmake ninja-build
# Librerías requeridas
sudo apt-get install -y \
libgmp-dev \
libmpfr-dev \
libgsl-dev \
libx11-dev
# Opcional: GoogleTest (si no quieres auto-fetch o estás offline)
sudo apt-get install -y libgtest-devsudo dnf install -y gcc-c++ # GCC
# sudo dnf install -y clang # Clang (alternativa)
sudo dnf install -y cmake ninja-build
sudo dnf install -y \
gmp-devel \
mpfr-devel \
gsl-devel \
libX11-devel
sudo dnf install -y gtest-develsudo pacman -S gcc
# sudo pacman -S clang
sudo pacman -S cmake ninja
sudo pacman -S gmp mpfr gsl libx11
sudo pacman -S gtestgit clone https://github.com/lrleon/Aleph-w.git
cd Aleph-w
cmake -S . -B build -G Ninja
cmake --build build --parallel
# Tests (opcional pero recomendado)
ctest --test-dir build --output-on-failure
# Instalación (opcional)
sudo cmake --install buildSi tienes CMake 3.21+, puedes usar CMakePresets.json:
cmake --preset default
cmake --build --preset default
ctest --preset defaultPara reproducir localmente el job de GitHub Actions clang + libc++ en Ubuntu:
scripts/run_clang_libcxx_ci_local.shEl script recompila GoogleTest con clang++ y libc++, configura el preset
clang-libcxx-ci, compila el proyecto y ejecuta ctest. Supone que existe un
toolchain funcional de Clang/libc++ y que las fuentes de GoogleTest están en
/usr/src (como ocurre al instalar libgtest-dev). Si tu instalación de
libc++ está fuera de las rutas del sistema, exporta
LIBCXX_SYSROOT=/ruta/al/sysroot antes de ejecutarlo.
Alternativa usando Make:
cmake -S . -B build
cmake --build build -j"$(nproc)"| Opción | Default | Descripción |
|---|---|---|
CMAKE_BUILD_TYPE |
Debug |
Debug, Release, RelWithDebInfo, MinSizeRel |
ALEPH_CXX_STANDARD |
20 |
estándar C++: 17, 20, 23 |
BUILD_EXAMPLES |
ON |
compila ejemplos |
BUILD_TESTS |
ON |
compila suite de tests |
BUILD_OPTIMIZED |
OFF |
conveniencia: si no defines CMAKE_BUILD_TYPE, usa Release |
ALEPH_USE_LIBCXX |
OFF |
con Clang, enlaza los targets C++ contra libc++ en lugar de la librería estándar por defecto |
Ejemplo:
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DALEPH_CXX_STANDARD=20 \
-DBUILD_EXAMPLES=ON \
-DBUILD_TESTS=ON
cmake --build build --parallelcmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build-debug --parallelcmake -S . -B build-release -DCMAKE_BUILD_TYPE=Release
cmake --build build-release --parallelImportante: -fno-strict-aliasing es necesario (ver comentario en CMakeLists.txt).
cmake -S . -B build-relwithdebinfo -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build-relwithdebinfo --parallelcmake -S . -B build-optimized -DBUILD_OPTIMIZED=ON
cmake --build build-optimized --parallelSi quieres -Ofast, pásalo explícitamente vía CMAKE_CXX_FLAGS_RELEASE (con cuidado).
cmake -S . -B build -DALEPH_CXX_STANDARD=17
cmake -S . -B build -DALEPH_CXX_STANDARD=20
cmake -S . -B build -DALEPH_CXX_STANDARD=23cmake -S . -B build -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_COMPILER=gcc
cmake -S . -B build -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clangcmake -S . -B build -DCMAKE_INSTALL_PREFIX=/opt/aleph
cmake --build build --parallel
sudo cmake --install buildcmake -S . -B build -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF
cmake --build build --parallelRecomendado evitar cmake . en el directorio fuente:
cmake -S . -B build # ✅
cmake . # ❌ctest --test-dir build --output-on-failure
ctest --test-dir build -V
ctest --test-dir build -j"$(nproc)"
# Ejecutar binarios específicos
./build/Tests/dynlist
./build/Tests/test_dijkstra
./build/Tests/latex_floyd_testNota: algunos tests largos/de performance están marcados Disabled/Skipped intencionalmente; ctest los lista al final.
Opción 1: pasar flags globales (instrumenta también libAleph.a):
cmake -S . -B build-asan -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBUILD_TESTS=ON \
-DBUILD_EXAMPLES=OFF \
-DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -g" \
-DCMAKE_C_FLAGS="-fsanitize=address,undefined -g"
cmake --build build-asan --parallel
ctest --test-dir build-asan --output-on-failurels /usr/local/lib/libAleph.a
ls /usr/local/include/aleph/Ejemplo mínimo:
cat > test.cpp << 'EOF'
#include <tpl_dynList.H>
#include <iostream>
int main() {
Aleph::DynList<int> list = {1, 2, 3, 4, 5};
list.for_each([](int x) { std::cout << x << " "; });
std::cout << "\n";
return 0;
}
EOF
g++ -std=c++20 -I/usr/local/include/aleph test.cpp \
-L/usr/local/lib -lAleph \
-lgmpxx -lgmp -lmpfr -lgsl -lgslcblas -lpthread -lX11 -lm \
-o test
./testSi tu distro trae CMake < 3.18, actualiza CMake (p.ej. Kitware, backports, etc.).
Instala los paquetes -dev/-devel correspondientes (según la distro).
Error típico:
Could not find X11Instala libx11-dev (Ubuntu/Debian) o libX11-devel (Fedora/RHEL).
cmake -S . -B build -DBUILD_TESTS=ON -DALEPH_FETCH_GTEST=OFFSi estás offline y no tienes libgtest-dev, desactiva tests:
cmake -S . -B build -DBUILD_TESTS=OFFVerifica versiones:
g++ --version
clang++ --versioncmake -S . -B build -DBUILD_EXAMPLES=ON
cmake --build build --parallel
./build/Examples/dijkstra_example
./build/Examples/mst_example
./build/Examples/network_flow_example
./build/Examples/voronoi_clipped_cells_example /tmp/voronoi_clipped_cells.csvEl ejemplo voronoi_clipped_cells_example genera celdas Voronoi recortadas
e indexadas por sitio y las exporta en formato CSV/WKT.
find_library(ALEPH_LIB Aleph)
find_path(ALEPH_INCLUDE_DIR tpl_dynList.H PATHS /usr/local/include/aleph)
find_package(Threads REQUIRED)
find_package(X11 REQUIRED)
target_include_directories(your_target PRIVATE ${ALEPH_INCLUDE_DIR})
target_link_libraries(your_target PRIVATE
${ALEPH_LIB}
gmpxx gmp mpfr gsl gslcblas m
Threads::Threads
${X11_LIBRARIES}
)include(FetchContent)
FetchContent_Declare(
aleph-w
GIT_REPOSITORY https://github.com/lrleon/Aleph-w.git
GIT_TAG v3
)
FetchContent_MakeAvailable(aleph-w)
target_link_libraries(your_target PRIVATE Aleph)add_subdirectory(path/to/Aleph-w)
target_link_libraries(your_target PRIVATE Aleph)- Revisa los issues: https://github.com/lrleon/Aleph-w/issues
- Incluye en el reporte: OS + versión, compilador + versión, CMake + versión, y el log completo del error.