google / or-tools

Google's Operations Research tools:
https://developers.google.com/optimization/
Apache License 2.0
10.97k stars 2.1k forks source link

Undefined symbols for architecture x86_64: #2302

Closed Hei5enber9 closed 3 years ago

Hei5enber9 commented 3 years ago

What version of OR-tools and what language are you using? Version: 8.1 Language: C++

Which solver are you using (e.g. CP-SAT, Routing Solver, GLOP, BOP, Gurobi)

What operating system (Linux, Windows, ...) and version? Mac OS big sur

I install the ORTOOLS by source code. I have done make thirdparties. When I input make cc_,

heisenberg@HeisenbergdeMacBook-Pro or-tools-stable % make cc
/bin/sh: - : invalid option /bin/sh: - : invalid option /bin/sh: - : invalid option clang++ -dynamiclib -mmacosx-version-min=10.9 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -current_version 8.1 -compatibility_version 8.1 \ -o lib/libortools.dylib \ objs/base/bitmap.o objs/base/commandlineflags.o objs/base/file.o objs/base/logging.o objs/base/logging_utilities.o objs/base/random.o objs/base/raw_logging.o objs/base/recordio.o objs/base/sysinfo.o objs/base/threadpool.o objs/base/timer.o objs/base/version.o objs/base/vlog_is_on.o \ objs/port/file_nonport.o objs/port/sysinfo_nonport.o \ objs/util/bitset.o objs/util/cached_log.o objs/util/file_util.o objs/util/fp_utils.o objs/util/graph_export.o objs/util/piecewise_linear_function.o objs/util/proto_tools.o objs/util/range_query_function.o objs/util/rational_approximation.o objs/util/sigint.o objs/util/sorted_interval_list.o objs/util/stats.o objs/util/time_limit.o objs/util/optional_boolean.pb.o \ objs/data/jobshop_scheduling_parser.o objs/data/rcpsp_parser.o objs/data/set_covering_data.o objs/data/set_covering_parser.o objs/data/jobshop_scheduling.pb.o objs/data/rcpsp.pb.o \ objs/lp_data/lp_data.o objs/lp_data/lp_data_utils.o objs/lp_data/lp_decomposer.o objs/lp_data/lp_print_utils.o objs/lp_data/lp_types.o objs/lp_data/lp_utils.o objs/lp_data/matrix_scaler.o objs/lp_data/matrix_utils.o objs/lp_data/model_reader.o objs/lp_data/mps_reader.o objs/lp_data/proto_utils.o objs/lp_data/sparse.o objs/lp_data/sparse_column.o \ objs/glop/basis_representation.o objs/glop/dual_edge_norms.o objs/glop/entering_variable.o objs/glop/initial_basis.o objs/glop/lp_solver.o objs/glop/lu_factorization.o objs/glop/markowitz.o objs/glop/preprocessor.o objs/glop/primal_edge_norms.o objs/glop/reduced_costs.o objs/glop/revised_simplex.o objs/glop/status.o objs/glop/update_row.o objs/glop/variable_values.o objs/glop/variables_info.o objs/glop/parameters.pb.o \ objs/graph/assignment.o objs/graph/astar.o objs/graph/bellman_ford.o objs/graph/cliques.o objs/graph/connected_components.o objs/graph/dijkstra.o objs/graph/linear_assignment.o objs/graph/max_flow.o objs/graph/min_cost_flow.o objs/graph/perfect_matching.o objs/graph/shortestpaths.o objs/graph/topologicalsorter.o objs/graph/util.o objs/graph/flow_problem.pb.o \ objs/algorithms/dynamic_partition.o objs/algorithms/dynamic_permutation.o objs/algorithms/find_graph_symmetries.o objs/algorithms/hungarian.o objs/algorithms/knapsack_solver.o objs/algorithms/knapsack_solver_for_cuts.o objs/algorithms/sparse_permutation.o \ objs/sat/all_different.o objs/sat/boolean_problem.o objs/sat/circuit.o objs/sat/clause.o objs/sat/cp_constraints.o objs/sat/cp_model.o objs/sat/cp_model_checker.o objs/sat/cp_model_expand.o objs/sat/cp_model_lns.o objs/sat/cp_model_loader.o objs/sat/cp_model_objective.o objs/sat/cp_model_postsolve.o objs/sat/cp_model_presolve.o objs/sat/cp_model_search.o objs/sat/cp_model_solver.o objs/sat/cp_model_symmetries.o objs/sat/cp_model_utils.o objs/sat/cumulative.o objs/sat/cumulative_energy.o objs/sat/cuts.o objs/sat/diffn.o objs/sat/disjunctive.o objs/sat/drat_checker.o objs/sat/drat_proof_handler.o objs/sat/drat_writer.o objs/sat/encoding.o objs/sat/feasibility_pump.o objs/sat/implied_bounds.o objs/sat/integer.o objs/sat/integer_expr.o objs/sat/integer_search.o objs/sat/intervals.o objs/sat/linear_constraint.o objs/sat/linear_constraint_manager.o objs/sat/linear_programming_constraint.o objs/sat/linear_relaxation.o objs/sat/lp_utils.o objs/sat/optimization.o objs/sat/pb_constraint.o objs/sat/precedences.o objs/sat/presolve_context.o objs/sat/presolve_util.o objs/sat/probing.o objs/sat/pseudo_costs.o objs/sat/restart.o objs/sat/rins.o objs/sat/sat_decision.o objs/sat/sat_inprocessing.o objs/sat/sat_solver.o objs/sat/scheduling_constraints.o objs/sat/simplification.o objs/sat/subsolver.o objs/sat/symmetry.o objs/sat/synchronization.o objs/sat/table.o objs/sat/theta_tree.o objs/sat/timetable.o objs/sat/timetable_edgefinding.o objs/sat/util.o objs/sat/var_domination.o objs/sat/zero_half_cuts.o objs/sat/boolean_problem.pb.o objs/sat/cp_model.pb.o objs/sat/sat_parameters.pb.o \ objs/bop/bop_base.o objs/bop/bop_fs.o objs/bop/bop_lns.o objs/bop/bop_ls.o objs/bop/bop_portfolio.o objs/bop/bop_solution.o objs/bop/bop_solver.o objs/bop/bop_util.o objs/bop/complete_optimizer.o objs/bop/integral_solver.o objs/bop/bop_parameters.pb.o \ objs/linear_solver/lpi_glop.o objs/linear_solver/bop_interface.o objs/linear_solver/cbc_interface.o objs/linear_solver/clp_interface.o objs/linear_solver/cplex_interface.o objs/linear_solver/glop_interface.o objs/linear_solver/glop_utils.o objs/linear_solver/glpk_interface.o objs/linear_solver/gurobi_environment.o objs/linear_solver/gurobi_interface.o objs/linear_solver/gurobi_proto_solver.o objs/linear_solver/linear_expr.o objs/linear_solver/linear_solver.o objs/linear_solver/linear_solver_callback.o objs/linear_solver/model_exporter.o objs/linear_solver/model_validator.o objs/linear_solver/sat_interface.o objs/linear_solver/sat_proto_solver.o objs/linear_solver/sat_solver_utils.o objs/linear_solver/scip_callback.o objs/linear_solver/scip_interface.o objs/linear_solver/scip_proto_solver.o objs/linear_solver/xpress_interface.o objs/linear_solver/linear_solver.pb.o \ objs/constraint_solver/alldiff_cst.o objs/constraint_solver/assignment.o objs/constraint_solver/constraint_solver.o objs/constraint_solver/constraints.o objs/constraint_solver/count_cst.o objs/constraint_solver/default_search.o objs/constraint_solver/demon_profiler.o objs/constraint_solver/deviation.o objs/constraint_solver/diffn.o objs/constraint_solver/element.o objs/constraint_solver/expr_array.o objs/constraint_solver/expr_cst.o objs/constraint_solver/expressions.o objs/constraint_solver/graph_constraints.o objs/constraint_solver/interval.o objs/constraint_solver/local_search.o objs/constraint_solver/model_cache.o objs/constraint_solver/pack.o objs/constraint_solver/range_cst.o objs/constraint_solver/resource.o objs/constraint_solver/routing.o objs/constraint_solver/routing_breaks.o objs/constraint_solver/routing_flags.o objs/constraint_solver/routing_flow.o objs/constraint_solver/routing_index_manager.o objs/constraint_solver/routing_lp_scheduling.o objs/constraint_solver/routing_neighborhoods.o objs/constraint_solver/routing_parameters.o objs/constraint_solver/routing_sat.o objs/constraint_solver/routing_search.o objs/constraint_solver/sched_constraints.o objs/constraint_solver/sched_expr.o objs/constraint_solver/sched_search.o objs/constraint_solver/search.o objs/constraint_solver/table.o objs/constraint_solver/timetabling.o objs/constraint_solver/trace.o objs/constraint_solver/utilities.o objs/constraint_solver/visitor.o objs/constraint_solver/assignment.pb.o objs/constraint_solver/demon_profiler.pb.o objs/constraint_solver/routing_enums.pb.o objs/constraint_solver/routing_parameters.pb.o objs/constraint_solver/search_limit.pb.o objs/constraint_solver/search_stats.pb.o objs/constraint_solver/solver_parameters.pb.o \ objs/gscip/gscip.o objs/gscip/gscip_ext.o objs/gscip/gscip_parameters.o objs/gscip/legacy_scip_params.o objs/gscip/gscip.pb.o \ /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libprotobuf.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_synchronization.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_bad_any_cast_impl.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_bad_optional_access.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_bad_variant_access.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_city.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_civil_time.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_examine_stack.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_failure_signal_handler.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_config.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_marshalling.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_parse.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_program_name.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_usage.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_usage_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_graphcycles_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_hash.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_hashtablez_sampler.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_leak_check.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_leak_check_disable.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_log_severity.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_malloc_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_periodic_sampler.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_distributions.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_distribution_test_util.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_pool_urbg.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_randen.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_randen_hwaes.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_randen_hwaes_impl.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_randen_slow.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_seed_material.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_internal_platform.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_seed_gen_exception.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_random_seed_sequences.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_raw_hash_set.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_raw_logging_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_scoped_set_env.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_spinlock_wait.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_stacktrace.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_status.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_statusor.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_str_format_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_strings.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_strings_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_symbolize.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_throw_delegate.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_time.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_time_zone.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_exponential_biased.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_cord.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_int128.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_debugging_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_demangle_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_commandlineflag.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_commandlineflag_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_config.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_marshalling.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_parse.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_private_handle_accessor.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_program_name.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_reflection.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_usage.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_flags_usage_internal.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libabsl_base.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libCbcSolver.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libOsiCbc.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libCbc.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libCgl.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libClpSolver.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libOsiClp.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libClp.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libOsi.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libCoinUtils.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libscip.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libnlpi.cppad.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/liblpinone.a /Users/heisenberg/Documents/or-tools-stable/dependencies/install/lib/libtpitny-7.0.1.darwin.x86_64.gnu.opt.a \ -install_name @rpath/libortools.dylib -lz -framework CoreFoundation -Wl,-rpath,@loader_path -Wl,-rpath,@loader_path/../lib -Wl,-rpath,@loader_path/../dependencies/install/lib Undefined symbols for architecture x86_64: "absl::hash_internal::Wyhash(void const, unsigned long, unsigned long long, unsigned long long const)", referenced from: absl::hash_internal::HashState::CombineLargeContiguousImpl64(unsigned long long, unsigned char const, unsigned long) in libabsl_hash.a(hash.cc.o) absl::hash_internal::HashState::WyhashImpl(unsigned char const, unsigned long) in libabsl_hash.a(hash.cc.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [lib/libortools.dylib] Error 1

I want to know how to deal with it. Thank you so much!

Mizux commented 3 years ago

Seems absl::hash_internal::Wyhash(void const*, unsigned long, unsigned long long, unsigned long long const*) and bsl::hash_internal::HashState::WyhashImpl(unsigned char const*, unsigned long) is not properly linked in libortools.dylib

Hei5enber9 commented 3 years ago

Seems absl::hash_internal::Wyhash(void const*, unsigned long, unsigned long long, unsigned long long const*) and bsl::hash_internal::HashState::WyhashImpl(unsigned char const*, unsigned long) is not properly linked in libortools.dylib

my god! could u please tell me how can I do to deal with this problem?

Mizux commented 3 years ago

May I ask where your abseil-cpp library comes from ?

Mizux commented 3 years ago

https://github.com/abseil/abseil-cpp/commit/5d8fc9192245f0ea67094af57399d7931d6bd53f seems to be on master branch and not in 20200923.2 the version we currently use IIRC

Hei5enber9 commented 3 years ago

May I ask where your absl library comes from ?

there is a file /Users/heisenberg/Documents/or-tools-stable/dependencies/sources/abseil-cpp-20200923.2, which is cloned during make third_party.

Mizux commented 3 years ago

yup, as expected and https://github.com/abseil/abseil-cpp/tree/20200923.2/absl/hash/internal don't contains it contrary to https://github.com/abseil/abseil-cpp/tree/master/absl/hash/internal.

last note: I've found protobuf seems to use a wyhash too, so same question ^^; are you using a custom protobuf version ?

Hei5enber9 commented 3 years ago

yup, as expected and https://github.com/abseil/abseil-cpp/tree/20200923.2/absl/hash/internal don't contains it contrary to https://github.com/abseil/abseil-cpp/tree/master/absl/hash/internal.

last note: I've found protobuf seems to use a wyhash too, so same question ^^; are you using a custom protobuf version ?

it is protobuf-v3.14.0.

is there any issue using this prorohuf version?

Mizux commented 3 years ago

should be fine...

I'm sorry but unless you have in some way absl master i.e. this file https://github.com/abseil/abseil-cpp/blob/e7ca23acac146b10edc4f752edd0bd28b0f14ea3/absl/hash/internal/hash.cc#L64-L66 I can't see how you would have absl::hash_internal::Wyhash otherwise.

Try make clean clean_third_party to wipeout everything and restart a build from scratch... You can also check if you didn't have an abseil-cpp master version installed in your system path (which can take precedence over the or-tools downloaded one and may contains these symbols).