pingcap / go-ycsb

A Go port of Yahoo! Cloud Serving Benchmark (YCSB)
Apache License 2.0
594 stars 243 forks source link

Build failed for macOS arm64 when linking foundationdb #206

Open Rjerk opened 2 years ago

Rjerk commented 2 years ago

Build failed in my macOS:

➜  go-ycsb git:(master) ✗ go version
go version go1.17 darwin/arm64

➜  go-ycsb git:(master) make
go build -tags " foundationdb" -o bin/go-ycsb cmd/go-ycsb/*
# github.com/apple/foundationdb/bindings/go/src/fdb
ld: warning: ignoring file /usr/local/lib/libfdb_c.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
Undefined symbols for architecture arm64:
  "_fdb_create_database", referenced from:
      __cgo_e91152327667_Cfunc_fdb_create_database in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_create_database)
  "_fdb_database_create_transaction", referenced from:
      __cgo_e91152327667_Cfunc_fdb_database_create_transaction in _x003.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_database_create_transaction)
  "_fdb_database_destroy", referenced from:
      __cgo_e91152327667_Cfunc_fdb_database_destroy in _x003.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_database_destroy)
  "_fdb_database_set_option", referenced from:
      __cgo_e91152327667_Cfunc_fdb_database_set_option in _x003.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_database_set_option)
  "_fdb_future_cancel", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_cancel in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_cancel)
  "_fdb_future_destroy", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_destroy in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_destroy)
  "_fdb_future_get_error", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_error in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_error)
  "_fdb_future_get_int64", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_int64 in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_int64)
  "_fdb_future_get_key", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_key in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_keyvalue_array, __cgo_e91152327667_Cfunc_fdb_future_get_key )
  "_fdb_future_get_keyvalue_array", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_keyvalue_array in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_keyvalue_array)
  "_fdb_future_get_string_array", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_string_array in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_string_array)
  "_fdb_future_get_value", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_get_value in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_get_value)
  "_fdb_future_is_ready", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_is_ready in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_is_ready)
  "_fdb_future_release_memory", referenced from:
      __cgo_e91152327667_Cfunc_fdb_future_release_memory in _x006.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_future_release_memory)
  "_fdb_future_set_callback", referenced from:
      _go_set_callback in _x006.o
      __cgo_e91152327667_Cfunc_go_set_callback in _x006.o
  "_fdb_get_error", referenced from:
      __cgo_e91152327667_Cfunc_fdb_get_error in _x004.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_get_error)
  "_fdb_get_max_api_version", referenced from:
      __cgo_e91152327667_Cfunc_fdb_get_max_api_version in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_get_max_api_version)
  "_fdb_network_set_option", referenced from:
      __cgo_e91152327667_Cfunc_fdb_network_set_option in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_network_set_option)
  "_fdb_run_network", referenced from:
      __cgo_e91152327667_Cfunc_fdb_run_network in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_run_network)
  "_fdb_select_api_version_impl", referenced from:
      __cgo_e91152327667_Cfunc_fdb_select_api_version_impl in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_select_api_version_impl)
  "_fdb_setup_network", referenced from:
      __cgo_e91152327667_Cfunc_fdb_setup_network in _x005.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_setup_network)
  "_fdb_transaction_add_conflict_range", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_add_conflict_range in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_add_conflict_range)
  "_fdb_transaction_atomic_op", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_atomic_op in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_atomic_op)
  "_fdb_transaction_cancel", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_cancel in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_cancel)
  "_fdb_transaction_clear", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_clear in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_clear_range, __cgo_e91152327667_Cfunc_fdb_transaction_clear )
  "_fdb_transaction_clear_range", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_clear_range in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_clear_range)
  "_fdb_transaction_commit", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_commit in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_commit)
  "_fdb_transaction_destroy", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_destroy in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_destroy)
  "_fdb_transaction_get", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_versionstamp, __cgo_e91152327667_Cfunc_fdb_transaction_get_range , __cgo_e91152327667_Cfunc_fdb_transaction_get_key , __cgo_e91152327667_Cfunc_fdb_transaction_get_approximate_size , __cgo_e91152327667_Cfunc_fdb_transaction_get_addresses_for_key , __cgo_e91152327667_Cfunc_fdb_transaction_get , __cgo_e91152327667_Cfunc_fdb_transaction_get_read_version , __cgo_e91152327667_Cfunc_fdb_transaction_get_committed_version )
  "_fdb_transaction_get_addresses_for_key", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_addresses_for_key in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_addresses_for_key)
  "_fdb_transaction_get_approximate_size", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_approximate_size in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_approximate_size)
  "_fdb_transaction_get_committed_version", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_committed_version in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_committed_version)
  "_fdb_transaction_get_key", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_key in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_key)
  "_fdb_transaction_get_range", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_range in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_range)
  "_fdb_transaction_get_read_version", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_read_version in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_read_version)
  "_fdb_transaction_get_versionstamp", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_get_versionstamp in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_get_versionstamp)
  "_fdb_transaction_on_error", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_on_error in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_on_error)
  "_fdb_transaction_reset", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_reset in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_reset)
  "_fdb_transaction_set", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_set in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_set_option, __cgo_e91152327667_Cfunc_fdb_transaction_set_read_version , __cgo_e91152327667_Cfunc_fdb_transaction_set )
  "_fdb_transaction_set_option", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_set_option in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_set_option)
  "_fdb_transaction_set_read_version", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_set_read_version in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_set_read_version)
  "_fdb_transaction_watch", referenced from:
      __cgo_e91152327667_Cfunc_fdb_transaction_watch in _x008.o
     (maybe you meant: __cgo_e91152327667_Cfunc_fdb_transaction_watch)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [build] Error 2

Solved this by adding -tags dynamic to have go-ycsb link foundationdb dynamically.

diff --git a/Makefile b/Makefile
index 63c0ab0..2a80647 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ build:
 ifeq ($(TAGS),)
        $(CGO_FLAGS) go build -o bin/go-ycsb cmd/go-ycsb/*
 else
-       $(CGO_FLAGS) go build -tags "$(TAGS)" -o bin/go-ycsb cmd/go-ycsb/*
+       $(CGO_FLAGS) go build -tags "$(TAGS)" -tags dynamic -o bin/go-ycsb cmd/go-ycsb/*
 endif
renormalize commented 6 months ago

Thank you so much for posting what solved the issue for you!

I was facing the following issue on darwin/arm64 while being on v1.0.1 and on master at 190650079055d9e4520af8bb367bbf42a37dffad -

➜  go-ycsb git:(master) make                       
go build -tags " libsqlite3" -o bin/go-ycsb cmd/go-ycsb/*
# github.com/mattn/go-sqlite3
../../../../go/pkg/mod/github.com/mattn/go-sqlite3@v2.0.1+incompatible/sqlite3_load_extension.go:25:8: could not determine kind of name for C.sqlite3_enable_load_extension
../../../../go/pkg/mod/github.com/mattn/go-sqlite3@v2.0.1+incompatible/sqlite3_load_extension.go:33:8: could not determine kind of name for C.sqlite3_load_extension
make: *** [build] Error 1

After adding -tags dynamic, the build was successful -

➜  go-ycsb git:(master) ✗ make
go build -tags " libsqlite3" -tags dynamic -o bin/go-ycsb cmd/go-ycsb/*
➜  go-ycsb git:(master) ✗