Conda build R package fails at C compiler issue on

2020-03-06 04:01发布

问题:

I'm trying to install an R package called treatSens with conda to use it in Jupyter notebook. The commands I executed:

conda install conda-build conda skeleton cran treatSens conda build r-treatsens conda install -c local r-treatsens

And I got the error about C compiler

* installing *source* package ‘dbarts’ ...
** package ‘dbarts’ successfully unpacked and MD5 sums checked
checking for gcc... x86_64-apple-darwin13.4.0-clang
checking whether the C compiler works... no
configure: error: in `/Users/myusername/anaconda3/conda-bld/r-dbarts_1543961434509/myenvname':
configure: error: C compiler cannot create executables
See `config.log' for more details
ERROR: configuration failed for package ‘dbarts’

My clang version:

clang version 4.0.1 (tags/RELEASE_401/final)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Users/myusername/anaconda3/envs/myenvname/bin

Looking into the config.log file I see

configure:3570: x86_64-apple-darwin13.4.0-clang -V >&5
clang-4.0: error: argument to '-V' is missing (expected 1 value)
clang-4.0: error: no input files
configure:3581: $? = 1
configure:3570: x86_64-apple-darwin13.4.0-clang -qversion >&5
clang-4.0: error: unknown argument: '-qversion'
clang-4.0: error: no input files
configure:3581: $? = 1
configure:3601: checking whether the C compiler works
configure:3623: x86_64-apple-darwin13.4.0-clang -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe -I/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/include -fdebug-prefix-map=/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/work=/usr/local/src/conda/r-dbarts-0.9_5 -fdebug-prefix-map=/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol=/usr/local/src/conda-prefix -D_FORTIFY_SOURCE=2 -mmacosx-version-min=10.9 -I/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/include -Wl,-pie -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/lib -L/Users/myusername/anaconda3/envs/work/conda-bld/r-dbarts_1543961045662/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/lib conftest.c  >&5
ld: warning: ignoring file /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd, file was built for unsupported file format ( 0x2D 0x2D 0x2D 0x20 0x21 0x74 0x61 0x70 0x69 0x2D 0x74 0x62 0x64 0x2D 0x76 0x33 ) which is not the architecture being linked (x86_64): /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd
ld: dynamic main executables must link with libSystem.dylib for architecture x86_64
clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)

It seems it's a problem about Conda build using the certain version of Apple C compiler. My guess is that I need to customize the C compiler for conda build. So my question becomes

  1. What correct gcc version do I need.
  2. How to set it for conda build.

回答1:

As a quick and dirty workaround (from this comment), I was able to install packages in R using below code in RStudio (opened in conda env)

Sys.setenv(CONDA_BUILD_SYSROOT="/")

Now, you can install any R package via RStudio Console e.g.

install.packages("tidyverse")

Hope this helps.



回答2:

There are several things you must do to get things building properly in MacOS Mojave. For reasons mysterious to me, the Anaconda folks are not keen to make this smooth, which is especially maddening for those of us who use esoteric R packages. I will write what seems current as of 2019-04-20:

1. Install Xcode (v10.2.1)

2. Install headers in the place open source tends to expect finding them. From the command line:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

3. Install the command-line tools

  • As a belt-and braces approach, I downloaded and installed the DMG Command_Line_Tools_macOS_10.14_for_Xcode_10.2.1 from https://developer.apple.com/download/more/
  • I believe this is also what is done by xcode-select --install. If your run that command, you should see the message
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

4. Download a copy of older MacOS SDK files. For example, from here

5. Create a directory /opt

sudo mkdir /opt

6. Copy the SDK files there

sudo cp -r ~/Downloads/MacOSX10.9.sdk /opt/

sudo chmod -R a+rX /opt

7. Create a conda_build_config.yaml file that will be referenced by Conda-build and related software. It should contain the following

macos_min_version:
  - 10.9
macos_machine:
  - x86_64-apple-darwin13.4.0
MACOSX_DEPLOYMENT_TARGET:
  - 10.9
CONDA_BUILD_SYSROOT:            # [osx]
  - /opt/MacOSX10.9.sdk          # [osx]

In a terminal you can do that with:

mkdir ~/.conda || echo 'Dir already present'
cat "macos_min_version:" >> ~/.conda/conda_build_config.yaml
cat "  - 10.9" >> ~/.conda/conda_build_config.yaml
cat "macos_machine:" >> ~/.conda/conda_build_config.yaml
cat "  - x86_64-apple-darwin13.4.0" >> ~/.conda/conda_build_config.yaml
cat "MACOSX_DEPLOYMENT_TARGET:" >> ~/.conda/conda_build_config.yaml
cat "  - 10.9" >> ~/.conda/conda_build_config.yaml
cat "CONDA_BUILD_SYSROOT:" >> ~/.conda/conda_build_config.yaml
cat "  - /opt/MacOSX10.9.sdk" >> ~/.conda/conda_build_config.yaml

8. Tell Conda about your YAML file via your .condarc. It should contain the lines:

conda_build:   
  config_file: ~/.conda/conda_build_config.yaml

which can be accomplished using

cat "conda_build:" >> ~/.condarc
cat "  config_file: ~/.conda/conda_build_config.yaml" >> ~/.condarc