[undefined reference] while compiling on Apple Silicon #44

189 views
Skip to first unread message

Richard Whatever

unread,
Jun 28, 2023, 3:30:57 PM6/28/23
to golang-nuts

Utilizing the c and c++ cross compiler, my first try on the go build command is as follows:

```

CGO_LDFLAGS="-L/opt/homebrew/Cellar/roc...@7.7.3/7.7.3/lib -L/opt/homebrew/Cellar/zstd/1.5.5/lib -L/opt/homebrew/Cellar/lz4/1.9.4/lib -L/opt/homebrew/Cellar/snappy/1.1.10/lib -L/opt/homebrew/Cellar/zlib/1.2.13/lib -L/opt/homebrew/cellar/musl-cross/0.9.9_1/libexec/lib" CGO_CFLAGS="-I/opt/homebrew/cellar/roc...@7.7.3/7.7.3/include" CGO_ENABLED=1 GOOS=linux  GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build -o yeeeeeeeeet

```


Ideally, this should work, but my terminal once again yells at me


-link-2821846975/000054.o: in function `gorocksdb_comparator_with_ts_create':

grocksdb.c:(.text+0x88): undefined reference to `rocksdb_comparator_with_ts_create'

/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /var/folders/85/7xzvr1n56wnbx8tj6h38drq80000gn/T/go-link-2821846975/000054.o: in function `gorocksdb_compactionfilter_create':

grocksdb.c:(.text+0xbe): undefined reference to `rocksdb_compactionfilter_create'

/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /var/folders/85/7xzvr1n56wnbx8tj6h38drq80000gn/T/go-link-2821846975/000054.o: in function `gorocksdb_mergeoperator_create':

grocksdb.c:(.text+0x104): undefined reference to `rocksdb_mergeoperator_create'

/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /var/folders/85/7xzvr1n56wnbx8tj6h38drq80000gn/T/go-link-2821846975/000054.o: in function `gorocksdb_slicetransform_create':

grocksdb.c:(.text+0x16d): undefined reference to `rocksdb_slicetransform_create'

collect2: error: ld returned 1 exit status


Being spammed of those countless undefined reference errors, I think there must have been something wrong with my go build configurations, by looking and half-guessing at https://stackoverflow.com/questions/62158905/undefined-references-to-symbols-in-standard-libraries-with-musl-cross-make , I changed my go build command as follows:


CGO_LDFLAGS="-L/opt/homebrew/Cellar/roc...@7.7.3/7.7.3/lib -L/opt/homebrew/Cellar/zstd/1.5.5/lib -L/opt/homebrew/Cellar/lz4/1.9.4/lib -L/opt/homebrew/Cellar/snappy/1.1.10/lib -L/opt/homebrew/Cellar/zlib/1.2.13/lib -L/opt/homebrew/cellar/musl-cross/0.9.9_1/libexec/lib" CGO_CFLAGS="-I/opt/homebrew/cellar/roc...@7.7.3/7.7.3/include" CGO_ENABLED=1 GOOS=linux  GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build -o yeeeeeeeeet


Yet the same error occurs.

I think there must have been something extremely simple and outright on the surface, right below my nose, that somehow I've just managed to unsee, yet I can't figure out what and how. Partly because my familiarity with C is not competent enough. And that's why I'm now humbly asking for any assistance that can help me get this over with.

Jason E. Aten

unread,
Jul 1, 2023, 8:57:48 PM7/1/23
to golang-nuts
The undefined reference errors means that you gave it headers for rocksdb but you forgot to give it the corresponding library flag that starts with -l like  -lyour_rocksdb_library_name (I don't know what the rocksdb or go shim to rocksdb library you are using is called; you'll have to figure that out). For example to link the math library libm.so, you typically use the linker flag -lm (so the lib prefix part of the name gets replace with -l on the linker command line)
Reply all
Reply to author
Forward
0 new messages