Skip to content

Commit

Permalink
Merge pull request #55 from sfiligoi/unnormalizedunweighted_241217
Browse files Browse the repository at this point in the history
Add unweighted_unnormalized method
  • Loading branch information
sfiligoi authored Dec 18, 2024
2 parents 801e38d + b512f1b commit f93973b
Show file tree
Hide file tree
Showing 12 changed files with 442 additions and 57 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ jobs:
./compare_unifrac_matrix.py test500.weighted_normalized_fp32.f.h5 t1.h5 1.e-5
./compare_unifrac_pcoa.py test500.weighted_normalized_fp32.f.h5 t1.h5 3 0.1
rm -f t1.h5
# unweighted_unnormalized
time ssu -f -m unweighted_unnormalized -i test500.biom -t test500.tre --pcoa 4 -r hdf5_fp32 -o t1.h5
./compare_unifrac_matrix.py test500.unweighted_unnormalized_fp32.f.h5 t1.h5 1.e-4
rm -f t1.h5
# unweighted
time ssu -f -m unweighted -i test500.biom -t test500.tre --pcoa 4 -r hdf5_fp32 -o t1.h5
./compare_unifrac_matrix.py test500.unweighted_fp32.f.h5 t1.h5 1.e-5
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,11 @@ The methods can be used directly through the command line after install:

-i The input BIOM table.
-t The input phylogeny in newick.
-m The method, [unweighted | weighted_normalized | weighted_unnormalized | generalized |
unweighted_fp64 | weighted_normalized_fp64 | weighted_unnormalized_fp64 | generalized_fp64 |
unweighted_fp32 | weighted_normalized_fp32 | weighted_unnormalized_fp32 | generalized_fp32].
-m The method, [unweighted | weighted_normalized | weighted_unnormalized | unweighted_unnormalized | generalized |
unweighted_fp64 | weighted_normalized_fp64 | weighted_unnormalized_fp64 |
unweighted_unnormalized_fp64 | generalized_fp64 |
unweighted_fp32 | weighted_normalized_fp32 | weighted_unnormalized_fp32 |
unweighted_unnormalized_fp32 | generalized_fp32].
-o The output distance matrix.
-g [OPTIONAL] The input grouping in TSV.
-c [OPTIONAL] The columns(s) to use for grouping, multiple values comma separated.
Expand Down
12 changes: 9 additions & 3 deletions src/api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@
method = weighted_normalized_fp32; \
else if(std::strcmp(requested_method, "weighted_unnormalized") == 0) \
method = weighted_unnormalized_fp32; \
else if(std::strcmp(requested_method, "unweighted_unnormalized") == 0) \
method = unweighted_unnormalized_fp32; \
else if(std::strcmp(requested_method, "generalized") == 0) \
method = generalized_fp32; \
else if(std::strcmp(requested_method, "unweighted_fp64") == 0) \
Expand All @@ -63,6 +65,8 @@
method = weighted_normalized; \
else if(std::strcmp(requested_method, "weighted_unnormalized_fp64") == 0) \
method = weighted_unnormalized; \
else if(std::strcmp(requested_method, "unweighted_unnormalized_fp64") == 0) \
method = unweighted_unnormalized; \
else if(std::strcmp(requested_method, "generalized_fp64") == 0) \
method = generalized; \
else if(std::strcmp(requested_method, "unweighted_fp32") == 0) \
Expand All @@ -71,6 +75,8 @@
method = weighted_normalized_fp32; \
else if(std::strcmp(requested_method, "weighted_unnormalized_fp32") == 0) \
method = weighted_unnormalized_fp32; \
else if(std::strcmp(requested_method, "unweighted_unnormalized_fp32") == 0) \
method = unweighted_unnormalized_fp32; \
else if(std::strcmp(requested_method, "generalized_fp32") == 0) \
method = generalized_fp32; \
else { \
Expand Down Expand Up @@ -187,11 +193,11 @@ void initialize_mat_no_biom(mat_t* &result, char** sample_ids, unsigned int n_sa
}

inline compute_status is_fp64_method(const std::string &method_string, bool &fp64) {
if ((method_string=="unweighted") || (method_string=="weighted_normalized") || (method_string=="weighted_unnormalized") || (method_string=="generalized")) {
if ((method_string=="unweighted") || (method_string=="weighted_normalized") || (method_string=="weighted_unnormalized") || (method_string=="unweighted_unnormalized") || (method_string=="generalized")) {
fp64 = false;
} else if ((method_string=="unweighted_fp64") || (method_string=="weighted_normalized_fp64") || (method_string=="weighted_unnormalized_fp64") || (method_string=="generalized_fp64")) {
} else if ((method_string=="unweighted_fp64") || (method_string=="weighted_normalized_fp64") || (method_string=="weighted_unnormalized_fp64") || (method_string=="unweighted_unnormalized_fp64") || (method_string=="generalized_fp64")) {
fp64 = true;
} else if ((method_string=="unweighted_fp32") || (method_string=="weighted_normalized_fp32") || (method_string=="weighted_unnormalized_fp32") || (method_string=="generalized_fp32")) {
} else if ((method_string=="unweighted_fp32") || (method_string=="weighted_normalized_fp32") || (method_string=="weighted_unnormalized_fp32") || (method_string=="unweighted_unnormalized_fp32") || (method_string=="generalized_fp32")) {
fp64 = false;
} else {
return unknown_method;
Expand Down
10 changes: 6 additions & 4 deletions src/su.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ void usage() {
std::cout << std::endl;
std::cout << " -i\t\tThe input BIOM table." << std::endl;
std::cout << " -t\t\tThe input phylogeny in newick." << std::endl;
std::cout << " -m\t\tThe method, [unweighted | weighted_normalized | weighted_unnormalized | generalized |" << std::endl;
std::cout << " unweighted_fp64 | weighted_normalized_fp64 | weighted_unnormalized_fp64 | generalized_fp64 |" << std::endl;
std::cout << " unweighted_fp32 | weighted_normalized_fp32 | weighted_unnormalized_fp32 | generalized_fp32]." << std::endl;
std::cout << " -m\t\tThe method, [unweighted | weighted_normalized | weighted_unnormalized | unweighted_unnormalized | generalized |" << std::endl;
std::cout << " unweighted_fp64 | weighted_normalized_fp64 | weighted_unnormalized_fp64 |" << std::endl;
std::cout << " unweighted_unnormalized_fp64 | generalized_fp64 |" << std::endl;
std::cout << " unweighted_fp32 | weighted_normalized_fp32 | weighted_unnormalized_fp32 |" << std::endl;
std::cout << " unweighted_unnormalized_fp32 | generalized_fp32]." << std::endl;
std::cout << " -o\t\tThe output distance matrix." << std::endl;
std::cout << " -g\t\t[OPTIONAL] The input grouping in TSV." << std::endl;
std::cout << " -c\t\t[OPTIONAL] The columns(s) to use for grouping, multiple values comma separated." << std::endl;
Expand Down Expand Up @@ -564,7 +566,7 @@ Format get_format(const std::string &format_string, const std::string &method_st
} else if (format_string == "hdf5_nodist") {
format_val = format_hdf5_nodist;
} else if (format_string == "hdf5") {
if ((method_string=="unweighted_fp64") || (method_string=="weighted_normalized_fp64") || (method_string=="weighted_unnormalized_fp64") || (method_string=="generalized_fp64"))
if ((method_string=="unweighted_fp64") || (method_string=="weighted_normalized_fp64") || (method_string=="weighted_unnormalized_fp64") || (method_string=="generalized_fp64") || (method_string=="unweighted_unnormalized_fp64"))
format_val = format_hdf5_fp64;
else
format_val = format_hdf5_fp32;
Expand Down
1 change: 1 addition & 0 deletions src/test_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,7 @@ void test_to_file() {

test_to_file_one("unweighted");
test_to_file_one("unweighted_fp32");
test_to_file_one("unweighted_unnormalized_fp32");
test_to_file_one("weighted_normalized");
test_to_file_one("weighted_normalized_fp32");
test_to_file_one("weighted_unnormalized");
Expand Down
40 changes: 40 additions & 0 deletions src/test_su.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1553,6 +1553,45 @@ void test_unweighted_unifrac_fast() {
SUITE_END();
}

void test_unnormalized_unweighted_unifrac() {
SUITE_START("test unnormalized unweighted unifrac");
std::vector<std::thread> threads(1);
su::BPTree tree("(GG_OTU_1:1,(GG_OTU_2:1,GG_OTU_3:1):1,(GG_OTU_5:1,GG_OTU_4:1):1);");
su::biom table("test.biom");

std::vector<double*> exp;
double stride1[] = {1,3,5,1,3,1};
double stride2[] = {4,4,6,2,2,2};
double stride3[] = {3,3,3,3,3,3};
exp.push_back(stride1);
exp.push_back(stride2);
exp.push_back(stride3);
std::vector<double*> strides = su::make_strides(6);
std::vector<double*> strides_total = su::make_strides(6);

su::task_parameters task_p;
task_p.start = 0; task_p.stop = 3; task_p.tid = 0; task_p.n_samples = 6; task_p.bypass_tips = false;

std::vector<su::task_parameters> tasks;
tasks.push_back(task_p);
su::process_stripes(std::ref(table),
std::ref(tree),
su::unweighted_unnormalized,
false,
std::ref(strides),
std::ref(strides_total),
std::ref(threads),
std::ref(tasks));

for(unsigned int i = 0; i < 3; i++) {
for(unsigned int j = 0; j < 6; j++) {
ASSERT(fabs(strides[i][j] - exp[i][j]) < 0.000001);
}
free(strides[i]);
}
SUITE_END();
}

void test_normalized_weighted_unifrac() {
SUITE_START("test normalized weighted unifrac");
std::vector<std::thread> threads(1);
Expand Down Expand Up @@ -1935,6 +1974,7 @@ int main(int argc, char** argv) {
test_unifrac_stripes_to_matrix_odd2();
test_unweighted_unifrac();
test_unweighted_unifrac_fast();
test_unnormalized_unweighted_unifrac();
test_unnormalized_weighted_unifrac();
test_normalized_weighted_unifrac();
test_generalized_unifrac();
Expand Down
Binary file not shown.
4 changes: 2 additions & 2 deletions src/unifrac.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* BSD 3-Clause License
*
* Copyright (c) 2016-2021, UniFrac development team.
* Copyright (c) 2016-2025, UniFrac development team.
* All rights reserved.
*
* See LICENSE file for more details
Expand All @@ -19,7 +19,7 @@
#include "biom_interface.hpp"

namespace su {
enum Method {unweighted, weighted_normalized, weighted_unnormalized, generalized, unweighted_fp32, weighted_normalized_fp32, weighted_unnormalized_fp32, generalized_fp32};
enum Method {unweighted, weighted_normalized, weighted_unnormalized, generalized, unweighted_fp32, weighted_normalized_fp32, weighted_unnormalized_fp32, generalized_fp32, unweighted_unnormalized, unweighted_unnormalized_fp32};

void faith_pd(biom_interface &table, BPTree &tree, double* result);

Expand Down
14 changes: 13 additions & 1 deletion src/unifrac_cmp.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* BSD 3-Clause License
*
* Copyright (c) 2016-2021, UniFrac development team.
* Copyright (c) 2016-2025, UniFrac development team.
* All rights reserved.
*
* See LICENSE file for more details
Expand Down Expand Up @@ -212,6 +212,9 @@ void SUCMP_NM::unifrac(const su::biom_interface &table,
case su::unweighted:
unifracTT<SUCMP_NM::UnifracUnweightedTask<double>,double>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
case su::unweighted_unnormalized:
unifracTT<SUCMP_NM::UnifracUnnormalizedUnweightedTask<double>,double>(table,tree, false, dm_stripes,dm_stripes_total,task_p);
break;
case su::weighted_normalized:
unifracTT<SUCMP_NM::UnifracNormalizedWeightedTask<double>,double>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
Expand All @@ -224,6 +227,9 @@ void SUCMP_NM::unifrac(const su::biom_interface &table,
case su::unweighted_fp32:
unifracTT<SUCMP_NM::UnifracUnweightedTask<float >,float>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
case su::unweighted_unnormalized_fp32:
unifracTT<SUCMP_NM::UnifracUnnormalizedUnweightedTask<float >,float>(table, tree, false, dm_stripes,dm_stripes_total,task_p);
break;
case su::weighted_normalized_fp32:
unifracTT<SUCMP_NM::UnifracNormalizedWeightedTask<float >,float>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
Expand Down Expand Up @@ -364,6 +370,9 @@ void SUCMP_NM::unifrac_vaw(const su::biom_interface &table,
case su::unweighted:
unifrac_vawTT<SUCMP_NM::UnifracVawUnweightedTask<double>,double>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
case su::unweighted_unnormalized:
unifrac_vawTT<SUCMP_NM::UnifracVawUnnormalizedUnweightedTask<double>,double>(table,tree, false, dm_stripes,dm_stripes_total,task_p);
break;
case su::weighted_normalized:
unifrac_vawTT<SUCMP_NM::UnifracVawNormalizedWeightedTask<double>,double>( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
Expand All @@ -376,6 +385,9 @@ void SUCMP_NM::unifrac_vaw(const su::biom_interface &table,
case su::unweighted_fp32:
unifrac_vawTT<SUCMP_NM::UnifracVawUnweightedTask<float >,float >( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
case su::unweighted_unnormalized_fp32:
unifrac_vawTT<SUCMP_NM::UnifracVawUnnormalizedUnweightedTask<float >,float >(table,tree, false, dm_stripes,dm_stripes_total,task_p);
break;
case su::weighted_normalized_fp32:
unifrac_vawTT<SUCMP_NM::UnifracVawNormalizedWeightedTask<float >,float >( table, tree, true, dm_stripes,dm_stripes_total,task_p);
break;
Expand Down
2 changes: 1 addition & 1 deletion src/unifrac_cmp.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* BSD 3-Clause License
*
* Copyright (c) 2016-2021, UniFrac development team.
* Copyright (c) 2016-2025, UniFrac development team.
* All rights reserved.
*
* See LICENSE file for more details
Expand Down
Loading

4 comments on commit f93973b

@jianshu93
Copy link

@jianshu93 jianshu93 commented on f93973b Dec 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sfiligoi, everything else looks good except this last step for compiling:

cd src && make api
make[1]: Entering directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project/apps/unifrac-binaries/src'
h5c++ -shared -fopenmp -o libssu.so tree.o biom.o biom_inmem.o biom_subsampled.o tsv.o unifrac_internal.o unifrac_cmp_cpu.o unifrac.o cmd.o skbio_alt.o api.o -lc -llz4 -llapacke -lcblas -lgfortran -lquadmath -L/lib -noshlib -lhdf5_cpp -lhdf5_hl_cpp -lhdf5_hl -lhdf5
/storage/pace-apps/spack/packages/linux-rhel9-x86_64_v3/gcc-12.3.0/hdf5-1.14.3-esvmamt2aiboaxi5x7kmynb4o4vxu3nl/h5c++
dir is /storage/pace-apps/spack/packages/linux-rhel9-x86_64_v3/gcc-12.3.0/hdf5-1.14.3-esvmamt2aiboaxi5x7kmynb4o4vxu3nl
g++: error: unrecognized command-line option '-noshlib'; did you mean '-nostdli'?
make[1]: *** [Makefile:162: libssu.so] Error 1
make[1]: Leaving directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project_bio-konstantinidis/apps/unifrac-binaries/src'
make: *** [Makefile:34: api] Error 2

I am using hdf5 v1.14.3, gnu gcc/g++ 12.3. Did you see this problem before?

Thanks,

Jianshu

@sfiligoi
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jianshu93 Not sure what went wrong in your case.
Are you building on Linux?

That said, we definitely recommend using compilers and support libraries from conda (as described in the README) and that seems to work:

conda create --strict-channel-priority -n unifrac-binaries -c conda-forge -c bioconda gxx_linux-64 gfortran_linux-64 hdf5 mkl-include lz4 zlib hdf5-static libcblas liblapacke make curl
conda activate unifrac-binaries
make clean && make api

@jianshu93
Copy link

@jianshu93 jianshu93 commented on f93973b Dec 18, 2024 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jianshu93
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sfiligoi,

I do not know why, after using conda: (unifrac-binaries) [jzhao399@login-phoenix-rh9-1 unifrac-binaries]$ make api && make main
cd src && make api
make[1]: Entering directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project_bio-konstantinidis/apps/unifrac-binaries/src'
h5c++ -shared -fopenmp -o libssu.so tree.o biom.o biom_inmem.o biom_subsampled.o tsv.o unifrac_internal.o unifrac_cmp_cpu.o unifrac.o cmd.o skbio_alt.o api.o -lc -llz4 -llapacke -lcblas -lgfortran -lquadmath -L/storage/home/hcoda1/4/jzhao399/p-ktk3-0/miniconda3/envs/unifrac-binaries/lib -noshlib -lhdf5_cpp -lhdf5_hl_cpp -lhdf5_hl -lhdf5
make[1]: Leaving directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project_bio-konstantinidis/apps/unifrac-binaries/src'
cd src && make main
make[1]: Entering directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project_bio-konstantinidis/apps/unifrac-binaries/src'
h5c++ -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /storage/home/hcoda1/4/jzhao399/p-ktk3-0/miniconda3/envs/unifrac-binaries/include -fopenmp -march=native -mtune=native -Wextra -Wno-unused-parameter -Wall -std=c++17 -pedantic -I. -Ofast -fPIC -L/storage/home/hcoda1/4/jzhao399/p-ktk3-0/miniconda3/envs/unifrac-binaries/lib su.cpp -o ssu tree.o biom.o biom_inmem.o biom_subsampled.o tsv.o unifrac_internal.o unifrac_cmp_cpu.o unifrac.o cmd.o skbio_alt.o api.o -lhdf5_cpp -llz4 -llapacke -lcblas -lgfortran -lquadmath -lpthread
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.o: in function su::biom::set_nnz() [clone .localalias]': biom.cpp:(.text+0x527): undefined reference to H5::DataSpace::getSimpleExtentDims(unsigned long*, unsigned long*) const'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.o: in function su::biom::load_ids(char const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) [clone .localalias]': biom.cpp:(.text+0x614): undefined reference to H5::DataSpace::getSimpleExtentDims(unsigned long*, unsigned long*) const'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.o: in function su::biom::load_indptr(char const*, std::vector<unsigned int, std::allocator<unsigned int> >&) [clone .localalias]': biom.cpp:(.text+0xb7f): undefined reference to H5::DataSpace::getSimpleExtentDims(unsigned long*, unsigned long*) const'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.o: in function su::biom::get_obs_data_direct(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int*&, double*&) [clone .localalias]': biom.cpp:(.text+0xec4): undefined reference to H5::DataSpace::DataSpace(int, unsigned long const*, unsigned long const*)'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0xedb): undefined reference to H5::DataSpace::DataSpace(int, unsigned long const*, unsigned long const*)' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0xef6): undefined reference to H5::DataSpace::selectHyperslab(H5S_seloper_t, unsigned long const*, unsigned long const*, unsigned long const*, unsigned long const*) const'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0xf0c): undefined reference to H5::DataSpace::selectHyperslab(H5S_seloper_t, unsigned long const*, unsigned long const*, unsigned long const*, unsigned long const*) const' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.o: in function su::biom::get_sample_data_direct(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, unsigned int*&, double*&)':
biom.cpp:(.text+0x16c4): undefined reference to H5::DataSpace::DataSpace(int, unsigned long const*, unsigned long const*)' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0x16db): undefined reference to H5::DataSpace::DataSpace(int, unsigned long const*, unsigned long const*)'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0x16f6): undefined reference to H5::DataSpace::selectHyperslab(H5S_seloper_t, unsigned long const*, unsigned long const*, unsigned long const*, unsigned long const*) const' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: biom.cpp:(.text+0x170c): undefined reference to H5::DataSpace::selectHyperslab(H5S_seloper_t, unsigned long const*, unsigned long const*, unsigned long const*, unsigned long const*) const'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: unifrac_cmp_cpu.o: in function su_cpu::UnifracGeneralizedTask<double>::_run(unsigned int) [clone ._omp_fn.0]': unifrac_cmp.cpp:(.text+0x6ac): undefined reference to _ZGVdN4vv_pow'
/storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: unifrac_cmp.cpp:(.text+0x859): undefined reference to _ZGVbN2vv_pow' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: unifrac_cmp_cpu.o: in function su_cpu::UnifracGeneralizedTask::_run(unsigned int) [clone ._omp_fn.0]':
unifrac_cmp.cpp:(.text+0x11ab): undefined reference to _ZGVdN8vv_powf' /storage/coda1/p-ktk3/0/jzhao399/miniconda3/envs/unifrac-binaries/bin/../lib/gcc/x86_64-conda-linux-gnu/14.2.0/../../../../x86_64-conda-linux-gnu/bin/ld: unifrac_cmp.cpp:(.text+0x13d6): undefined reference to _ZGVbN4vv_powf'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:156: ssu] Error 1
make[1]: Leaving directory '/storage/coda1/p-ktk3/0/jzhao399/rich_project_bio-konstantinidis/apps/unifrac-binaries/src'
make: *** [Makefile:51: main] Error 2

Can you please share a pre-built binary with me (linux only), perhaps statically linked (CPU only)?

Thanks,
Jianshu

Please sign in to comment.