Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bazel build //... fails on OSX #226

Closed
johnedmonds opened this issue May 16, 2019 · 17 comments
Closed

bazel build //... fails on OSX #226

johnedmonds opened this issue May 16, 2019 · 17 comments
Assignees
Labels

Comments

@johnedmonds
Copy link
Contributor

Seems to be because xcode removed libstdc++ (and replaced it with libc++) but we still depend on it. Here's the full error message:

bazel build //...
INFO: Analysed 48 targets (110 packages loaded, 1680 targets configured).
INFO: Found 48 targets...
ERROR: /Users/jedmonds/rules_rust/tools/runfiles/BUILD:14:1: error executing shell command: '/bin/bash -c CARGO_MANIFEST_DIR=$(pwd)/tools/runfiles external/rust_darwin_x86_64/bin/rustc "$@" --remap-path-prefix="$(pwd)"=__bazel_redacted_pwd  tools/runfiles/runfiles.rs --crate-name=runfiles_...' failed (Exit 1) bash failed: error executing command /bin/bash -c 'CARGO_MANIFEST_DIR=$(pwd)/tools/runfiles external/rust_darwin_x86_64/bin/rustc "$@" --remap-path-prefix="$(pwd)"=__bazel_redacted_pwd' '' tools/runfiles/runfiles.rs ... (remaining 14 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
error: linking with `external/local_config_cc/cc_wrapper.sh` failed: exit code: 1
  |
  = note: "external/local_config_cc/cc_wrapper.sh" "-m64" "-L" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.0.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.1.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.10.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.11.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.12.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.13.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.14.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.15.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.2.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.3.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.4.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.5.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.6.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.7.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.8.rcgu.o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.runfiles_test.7rcbfp3g-cgu.9.rcgu.o" "-o" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test" "bazel-out/darwin-fastbuild/bin/tools/runfiles/runfiles_test.wsx61dhnteu5819.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libtest-049ef957f3c3bff3.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libterm-85376e998eb8d4cf.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libgetopts-5b62a9453c560a5d.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libstd-d4fbe66ddea5f3ce.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-cb02f3c2aa14313b.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libbacktrace_sys-b0895307a49d7b98.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libunwind-5751ec7e6e80fbea.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-136c67c44acb8989.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liblibc-440e2779940c5e25.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liballoc-089d48ff1bba5f70.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-9d6280dd79b180e2.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcore-f948d62f596dcd3d.rlib" "/private/var/tmp/_bazel_jedmonds/35519b6885cd84f654acda1089b07add/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-35232c4af1148867.rlib" "-lSystem" "-lresolv" "-lc" "-lm" "-undefined" "dynamic_lookup" "-headerpad_max_install_names" "-lstdc++" "-lm"
  = note: ld: library not found for -lstdc++
          clang: error: linker command failed with exit code 1 (use -v to see invocation)
          

error: aborting due to previous error

INFO: Elapsed time: 2.644s, Critical Path: 0.85s
INFO: 1 process: 1 darwin-sandbox.
FAILED: Build did NOT complete successfully
@sayrer
Copy link
Contributor

sayrer commented May 17, 2019

This WFM on 0.25.2

sayrer:rules_rust sayrer$ bazel version
Build label: 0.25.2
Build target: bazel-out/darwin-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri May 10 20:50:40 2019 (1557521440)
Build timestamp: 1557521440
Build timestamp as int: 1557521440
sayrer:rules_rust sayrer$ bazel build //...
DEBUG: Rule 'io_bazel_skydoc' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = "1701c7bd611f7b8467e24014ecd92ce17a35ca2f8e0c0e74a4c7252139a8e329"
DEBUG: Rule 'io_bazel_rules_sass' indicated that a canonical reproducible form can be obtained by modifying arguments shallow_since = "1542966119 +0100"
INFO: Analyzed 48 targets (0 packages loaded, 0 targets configured).
INFO: Found 48 targets...
INFO: Elapsed time: 0.393s, Critical Path: 0.01s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
sayrer:rules_rust sayrer$ 

@johnedmonds
Copy link
Contributor Author

johnedmonds commented May 17, 2019

Just tried installing command line tools for xcode 9 and it fixed the issue. So installing an older version of xcode seems to be a good workaround although it would be nice to get this issue fixed for newer xcode versions.

@sayrer
Copy link
Contributor

sayrer commented May 17, 2019

I only have XCode 10.2.1 tools installed. Are you sure you're running Bazel 0.25.2? Another problem can happen if you have never run xcode-select. After that, I think Bazel should add libc++ (llvm/clang) rather than libstdc++ (gnu/gcc) to the link line.

$ xcodebuild -showsdks
iOS SDKs:
	iOS 12.2                      	-sdk iphoneos12.2

iOS Simulator SDKs:
	Simulator - iOS 12.2          	-sdk iphonesimulator12.2

macOS SDKs:
	macOS 10.14                   	-sdk macosx10.14

tvOS SDKs:
	tvOS 12.2                     	-sdk appletvos12.2

tvOS Simulator SDKs:
	Simulator - tvOS 12.2         	-sdk appletvsimulator12.2

watchOS SDKs:
	watchOS 5.2                   	-sdk watchos5.2

watchOS Simulator SDKs:
	Simulator - watchOS 5.2       	-sdk watchsimulator5.2

@arjenroodselaar
Copy link

I am running in the same error with a fresh install of Bazel 0.28.1, Skylib 0.9.0 and the current master of rules_rust. I have both Xcode 10.3 and the CLI tools installed. Switching between either does not seem to make a difference.

arjen:~ arjen$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
arjen:~ arjen$ xcodebuild -showsdks
iOS SDKs:
	iOS 12.4                      	-sdk iphoneos12.4

iOS Simulator SDKs:
	Simulator - iOS 12.4          	-sdk iphonesimulator12.4

macOS SDKs:
	macOS 10.14                   	-sdk macosx10.14

tvOS SDKs:
	tvOS 12.4                     	-sdk appletvos12.4

tvOS Simulator SDKs:
	Simulator - tvOS 12.4         	-sdk appletvsimulator12.4

watchOS SDKs:
	watchOS 5.3                   	-sdk watchos5.3

watchOS Simulator SDKs:
	Simulator - watchOS 5.3       	-sdk watchsimulator5.3

Unless someone has a solution/work around I'll try and look into this over the next few days.

@arjenroodselaar
Copy link

It seems Xcode is really needed, just the CLI tools does not suffice. Setting the path, deleting Bazel's local cache and rebuilding my target seems to resolve this for me. After that everything seems fine.

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
rm -rf /private/var/tmp/_bazel_arjen

@dayfine
Copy link
Contributor

dayfine commented Dec 13, 2019

It seems Xcode is really needed, just the CLI tools does not suffice. Setting the path, deleting Bazel's local cache and rebuilding my target seems to resolve this for me. After that everything seems fine.

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
rm -rf /private/var/tmp/_bazel_arjen

Thanks. I downloaded Xcode and followed these command to fix the issue. Too bad I had to download the entire Xcode though...

@jez
Copy link

jez commented May 10, 2020

I got around this by using a custom cc toolchain, instead of relying on the host toolchain (this has the advantage that I can be sure I'm building with the same version of the same compiler on all platforms):

# -- WORKSPACE --
http_archive(
    name = "com_grail_bazel_toolchain",
    url = "https://github.com/grailbio/bazel-toolchain/archive/0.5.zip",
    sha256 = "33011cd77021017294d1982b48d0c3a081c777b9aad9a75f3e4eada0e10894d1",
    strip_prefix = "bazel-toolchain-0.5",
)

load("@com_grail_bazel_toolchain//toolchain:deps.bzl", "bazel_toolchain_dependencies")
bazel_toolchain_dependencies()

load("@com_grail_bazel_toolchain//toolchain:rules.bzl", "llvm_toolchain")
llvm_toolchain(
    name = "llvm_toolchain",
    absolute_paths = True,
    llvm_version = "9.0.0",
)

load("@llvm_toolchain//:toolchains.bzl", "llvm_register_toolchains")
llvm_register_toolchains()

# ... rest of rules_rust setup ...
# -- .bazelrc --

build --crosstool_top=@llvm_toolchain//:toolchain

Instead of relying on external/local_config_cc/cc_wrapper.sh, it depends on an LLVM 9 toolchain that it downloads directly. LLVM 10 would work too, except I need to build on Ubuntu 16.04, and the LLVM project hasn't published pre-built binaries for Ubuntu 16.04 for LLVM 10 (yet, maybe ever I'm not sure).


Also chime in, I hit the exact same error as the OP reported. I'm on macOS 10.15.3 (Catalina) and I only have the command line tools installed, not Xcode.app:

❯ xcode-select --print-path
/Library/Developer/CommandLineTools

❯ /usr/bin/cc --version
Apple clang version 11.0.3 (clang-1103.0.32.59)
Target: x86_64-apple-darwin19.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

It's definitely a bug to continue to depend on passing -lstdc++ to a macOS cc toolchain. I'm not sure if rules_rust is doing that or if something inside Bazel is, but I'd hope that we wouldn't have to require everyone pin to a specific version of an LLVM toolchain to be able to use rules_rust on macOS.

@UebelAndre
Copy link
Collaborator

Pinging this issue. It'd be nice to have the rules be able to fetch the things they needed to work.

@ittaiz
Copy link
Member

ittaiz commented Nov 30, 2020

Hi,
I'm running into this now :( @jez's solution didn't help me...
Trying to see if I can carve out a repro

@UebelAndre
Copy link
Collaborator

Unsure if it's related to the issue here but examples are currently broken as well:

examples % bazel build //...
INFO: Invocation ID: f6d4af43-2461-48e8-92a5-19ffa360dcdf
INFO: Analyzed 68 targets (0 packages loaded, 0 targets configured).
INFO: Found 68 targets...
INFO: From Compiling Rust rlib matrix_dylib_test (2 files):
error: linking with `external/local_config_cc/cc_wrapper.sh` failed: exit code: 1
  |
  = note: "external/local_config_cc/cc_wrapper.sh" "-m64" "-arch" "x86_64" "-L" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.0.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.1.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.10.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.11.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.12.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.13.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.14.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.15.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.2.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.3.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.4.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.5.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.6.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.7.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.8.rcgu.o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.9.rcgu.o" "-o" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test" "bazel-out/darwin-fastbuild/bin/ffi/rust_calling_c/matrix_dylib_test.4ieu8ualsfp8muf7.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "-L" "bazel-out/darwin-fastbuild/bin/external/libc" "-L" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libtest-5764ebb7b6266c24.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libterm-97d79bc97610bba0.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libgetopts-efb979268194fec8.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libunicode_width-144cb7c091600976.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_std-ec739e8f761f51be.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/execroot/examples/bazel-out/darwin-fastbuild/bin/external/libc/liblibc-557824706.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libstd-688c1376a25c049d.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-078f89c2cdb6d46b.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libobject-fec020208bc1ad3c.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libaddr2line-38540dcacc9fd218.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libgimli-6f613179f618c598.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-4d1a5d7118aaeaf2.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libhashbrown-d88fab3b1b9d8356.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_alloc-a21754532a052f2f.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libunwind-2e9ebc4127641a96.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcfg_if-82d0f961232a05ca.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liblibc-370b1b71f08bac3c.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liballoc-816106c1f35f5421.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-20f3a030f1a56a86.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcore-60333aa00936c5ce.rlib" "/private/var/tmp/_bazel_user/1426ad6c00f8f7b996ddc75bef70871c/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-116aaeaea873ef94.rlib" "-lc" "-lm" "-lSystem" "-lresolv" "-lc" "-lm" "-lc++" "-fobjc-link-runtime" "-headerpad_max_install_names" "-no-canonical-prefixes" "-mmacosx-version-min=11.0"
  = note: Undefined symbols for architecture x86_64:
            "_matrix_equal", referenced from:
                matrix_dylib_test::Matrix::equal::h7aa62cc76e4a1502 in matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.10.rcgu.o
            "_matrix_free", referenced from:
                _$LT$matrix_dylib_test..Matrix$u20$as$u20$core..ops..drop..Drop$GT$::drop::ha954de2d449e2da0 in matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.10.rcgu.o
            "_matrix_transpose", referenced from:
                matrix_dylib_test::Matrix::transpose::hcb6c4391243a92b5 in matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.10.rcgu.o
            "_matrix_new", referenced from:
                matrix_dylib_test::Matrix::new::hcd178bce06ced7bf in matrix_dylib_test.matrix_dylib_test.7rcbfp3g-cgu.10.rcgu.o
          ld: symbol(s) not found for architecture x86_64
          clang: error: linker command failed with exit code 1 (use -v to see invocation)


error: aborting due to previous error

ERROR: /Users/user/Code/rules_rust/examples/ffi/rust_calling_c/BUILD:42:10: output 'ffi/rust_calling_c/matrix_dylib_test' was not created
ERROR: /Users/user/Code/rules_rust/examples/ffi/rust_calling_c/BUILD:42:10: not all outputs were created or valid
INFO: Elapsed time: 0.499s, Critical Path: 0.07s
INFO: 20 processes: 1 remote cache hit, 19 internal.
FAILED: Build did NOT complete successfully

@simmonmt
Copy link

In my case here's what seems to be happening. With hello world in src/hello.rs, bazel runs this:

(cd /private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/execroot/__main__ && \
  exec env - \
    CARGO_CFG_TARGET_ARCH=x86_64 \
    CARGO_CFG_TARGET_OS=darwin \
    CARGO_MANIFEST_DIR='${pwd}/src' \
    CARGO_PKG_AUTHORS='' \
    CARGO_PKG_DESCRIPTION='' \
    CARGO_PKG_HOMEPAGE='' \
    CARGO_PKG_NAME=hello \
    CARGO_PKG_VERSION=0.0.0 \
    CARGO_PKG_VERSION_MAJOR=0 \
    CARGO_PKG_VERSION_MINOR=0 \
    CARGO_PKG_VERSION_PATCH=0 \
    CARGO_PKG_VERSION_PRE='' \
    SYSROOT='' \
  bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/io_bazel_rules_rust/util/process_wrapper/process_wrapper --subst 'pwd=${pwd}' -- external/rust_darwin_x86_64/bin/rustc src/hello.rs '--crate-name=hello' '--crate-type=bin' '--error-format=human' '--codegen=metadata=' '--out-dir=bazel-out/darwin-fastbuild/bin/src' '--codegen=extra-filename=' '--codegen=opt-level=0' '--codegen=debuginfo=0' '--emit=dep-info,link' '--color=always' '--target=x86_64-apple-darwin' -L external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib '--codegen=linker=external/local_config_cc/cc_wrapper.sh' --codegen 'link-args=-undefined dynamic_lookup -headerpad_max_install_names -lstdc++ -lm')

The key is the --codegen 'link-args=-undefined dynamic_lookup -headerpad_max_install_names -lstdc++ -lm' flag.

The error is this:

error: linking with `external/local_config_cc/cc_wrapper.sh` failed: exit code: 1
  |
  = note: "external/local_config_cc/cc_wrapper.sh" "-m64" "-arch" "x86_64" "-L" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.0.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.1.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.2.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.3.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.4.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.5.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.6.rcgu.o" "bazel-out/darwin-fastbuild/bin/src/hello.hello.7rcbfp3g-cgu.7.rcgu.o" "-o" "bazel-out/darwin-fastbuild/bin/src/hello" "bazel-out/darwin-fastbuild/bin/src/hello.1nxjf9so94czdgcz.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libstd-688c1376a25c049d.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-078f89c2cdb6d46b.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libobject-fec020208bc1ad3c.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libaddr2line-38540dcacc9fd218.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libgimli-6f613179f618c598.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-4d1a5d7118aaeaf2.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libhashbrown-d88fab3b1b9d8356.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_alloc-a21754532a052f2f.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libunwind-2e9ebc4127641a96.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcfg_if-82d0f961232a05ca.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liblibc-370b1b71f08bac3c.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/liballoc-816106c1f35f5421.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-20f3a030f1a56a86.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcore-60333aa00936c5ce.rlib" "/private/var/tmp/_bazel_simmonmt/6133470e1f28655eeaa7228af224a3b5/external/rust_darwin_x86_64/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-116aaeaea873ef94.rlib" "-lSystem" "-lresolv" "-lc" "-lm" "-undefined" "dynamic_lookup" "-headerpad_max_install_names" "-lstdc++" "-lm"

That failure message, as far as I can tell, is coming from rustup. Let's see where the -lstdc++ -lm is coming from.

bazel/tools/cpp/unix_cc_configure.bzl line 391:

    bazel_linkopts = "-lstdc++:-lm"

There's no conditional around it, so it looks like every unix c++ builder (toolchain?) gets those flags.

They can, however, be overridden. line 396 in that file:

    link_opts = split_escaped(get_env_var(
        repository_ctx,
        "BAZEL_LINKOPTS",
        bazel_linkopts,
        False,
    ), ":")

If I run this, the compilation magically succeeds:

BAZEL_LINKOPTS=-lc++:-lm bazel build -s src/...

FWIW a cc_binary also compiles with that BAZEL_LINKOPTS setting. Of course it also runs without the linkopts override. Perhaps that's because the c++ link doesn't pass --nodefaultlibs like rustc does?

Are we meant to be in configure_osx_toolchain? In my case I'm falling through to configure_unix_toolchain (if I set BAZEL_USE_XCODE_TOOLCHAIN=1 the build fails), which is where we end up with the unconditional -lstdc++.

I'm guessing that xcode_locator is working for those who install full xcode (not just the command line tools) so that's why they're staying in configure_osx_toolchain rather than being fobbed off on configure_unix_toolchain?

@simmonmt
Copy link

I should note that my inability to run xcode_locator is quite possibly my doing (or CorpEng's doing), and I'm not in a position to confirm/refute that. The takeaways are probably if xcode_locator fails, for whatever reason, failure to link against libstdc++ may result. Whether it makes sense to change from -lstdc++ to -lc++, and whether the unix toolchain is expected to be used at all on a mac, is well beyond my level of expertise.

@Titousensei
Copy link

I'm having the same problem on macOS Monterey. BAZEL_LINKOPTS=-lc++:-lm bazel build //... does work. Is there a way to make it the default? (without messing up my c++ settings?)

@duarten
Copy link
Contributor

duarten commented Dec 5, 2021

I was having this issue on Big Sur, but downgrading Bazel from 4.2.2 to 4.1.0 fixed it.

@keith
Copy link
Member

keith commented Jan 11, 2022

For folks experiencing ld: library not found for -lstdc++, this is a bug in bazel I've submitted a patch for, for more details see bazelbuild/bazel#14395 (comment)

bazel-io pushed a commit to bazelbuild/bazel that referenced this issue Jan 27, 2022
This flag has been invalid seemingly since macOS 10.9 from 2013. By
default clang remaps this back to -lc++, but if your linkopts pass
-nodefaultlibs this is not the case, in which case this invalid flag
fails the link. This happened for rust builds where the rust driver
passes this flag intentionally.

For more info see #14395 (comment)

Fixes google/cargo-raze#247 #14395 bazelbuild/rules_rust#226

Closes #14542.

PiperOrigin-RevId: 424588734
brentleyjones pushed a commit to brentleyjones/bazel that referenced this issue Feb 8, 2022
This flag has been invalid seemingly since macOS 10.9 from 2013. By
default clang remaps this back to -lc++, but if your linkopts pass
-nodefaultlibs this is not the case, in which case this invalid flag
fails the link. This happened for rust builds where the rust driver
passes this flag intentionally.

For more info see bazelbuild#14395 (comment)

Fixes google/cargo-raze#247 bazelbuild#14395 bazelbuild/rules_rust#226

Closes bazelbuild#14542.

PiperOrigin-RevId: 424588734
(cherry picked from commit 8b60c90)
Wyverald pushed a commit to bazelbuild/bazel that referenced this issue Feb 9, 2022
This flag has been invalid seemingly since macOS 10.9 from 2013. By
default clang remaps this back to -lc++, but if your linkopts pass
-nodefaultlibs this is not the case, in which case this invalid flag
fails the link. This happened for rust builds where the rust driver
passes this flag intentionally.

For more info see #14395 (comment)

Fixes google/cargo-raze#247 #14395 bazelbuild/rules_rust#226

Closes #14542.

PiperOrigin-RevId: 424588734
(cherry picked from commit 8b60c90)

Co-authored-by: Keith Smiley <keithbsmiley@gmail.com>
@keith
Copy link
Member

keith commented Apr 2, 2022

We can close this one now as the fixes have been merged into bazel 5.1

@illicitonion
Copy link
Collaborator

Thanks!

@UebelAndre UebelAndre added the bug label Apr 4, 2022
gregorias added a commit to gregorias/anki that referenced this issue Apr 18, 2022
This update addresses bazelbuild/rules_rust#226, which was causing Anki builds to fail on macOS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests