I think this is a bug I should report but will ask here first to see if I am missing something simple.
Firstly I need to build from source for various reasons including the fact that I don't have sudo access to the system I am trying to install on.
The system I am trying to compile on is a ppc64el system running RedHat 7 (3.10.0-1160.62.1.el7.ppc64le). I can successfully compile on a x86_64 system running the same version RedHat 7 (3.10.0-1160.62.1.el7.x86_64)
When I configure with the following, make completes fine, but if I remove the --disable-jit-support it fails with the following error.
Am I missing a setting on ./configure that can fix this?
./configure --enable-shared --enable-load-relative --disable-install-doc --prefix=$RUBY_PREFIX --exec-prefix=$RUBY_PREFIX/rh_ppc --disable-jit-support
building rb_mjit_header.h
rb_mjit_header.h updated
building .ext/include/powerpc64le-linux/rb_mjit_min_header-3.1.2.h
error in final header file:
In file included from /tmp/20220525-12786-q2ndz2.c:1:0:
/tmp/20220525-12786-vf3xbh.h:16627:1: error: multiple storage classes in declaration specifiers
__attribute__ ((__visibility__("default"))) extern
^
compilation terminated due to -Wfatal-errors.
make: *** [.ext/include/powerpc64le-linux/rb_mjit_min_header-3.1.2.h] Error 1
I have been trying to compile the oracle driver for naviserver (nsoracle). It compiles just fine but when I start up the server it complains during module load of nsoracle.so.
Error: modload: /usr/local/ns/bin/nsoracle.so: couldn't load file "/usr/local/ns/bin/nsoracle.so": ld.so.1: nsd: fatal: relocation error: file /usr/local/ns/bin/nsoracle.so: symbol OCIServerDetach: referenced symbol not found
The library/linking line in the Makefile looks like this:
MODLIBS += -R$(ORACLE_HOME}:${ORACLE_HOME}/lib:$NSHOME/bin:$NSHOME/lib -L$(ORACLE_HOME):$(ORACLE_HOME)/lib:$(NSHOME)/lib -L$(ORACLE_HOME):$(ORACLE_HOME)/lib:$(NSHOME)/lib -locci -lclntsh -lnnz11
ORACLE_HOME contains libocci.so.11.1 libclntsh.11.1 libociei.so libnnz11.so lib
As it turns out oracle compiles it's instant client libraries using SunStudio using libraries not present in illumos(I run OmniOS) or GNU gcc distributions.
libCrun.so and libCstd.so are required to properly link instantclient (specifically libocci.so.11.1) against nsoracle or other projects.
You can use a source like the pkg install command for omnios
pkg install sunstudio12.1
Also check here for other options for obtaining Sun Studio
The gmake command I finally used that worked for me:
gmake MODLIBS+="-L/opt/sunstudio12.1/lib/amd64 -L$ORACLE_HOME/lib -L/usr/local/ns/lib -R/opt/sunstudio12.1/lib/amd64 -R$ORACLE_HOME/lib -R/usr/local/ns/lib -lCrun -lCstd -locci -lclntsh -lociei -lnnz11 -lnsthread -lnsdb -lnsd -ltcl8.5"
You would change /opt/sunstudio12.1/lib/amd64 to /opt/sunstudio12.1/lib if performing a 32 bit compile.
I have a single .rs file. When I compile it by rustc test1.rs, I get an error:
error: linking with `cc` failed: exit code: 1
note: cc '-m64' '-L' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib' '-o' 'test1' 'test1.o' '-Wl,-force_load,/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/libmorestack.a' '-Wl,-dead_strip' '-nodefaultlibs' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/libstd-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/libcollections-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/libunicode-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/librand-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/liballoc-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/liblibc-4e7c5e5c.rlib' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib/libcore-4e7c5e5c.rlib' '-L' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/x86_64-apple-darwin/lib' '-L' '/Users/alex/Documents/projects/rust/.rust/lib/x86_64-apple-darwin' '-L' '/Users/alex/Documents/projects/rust/lib/x86_64-apple-darwin' '-lSystem' '-lpthread' '-lc' '-lm' '-lcompiler-rt'
note: ld: warning: directory not found for option '-L/Users/alex/Documents/projects/rust/.rust/lib/x86_64-apple-darwin'
ld: warning: directory not found for option '-L/Users/alex/Documents/projects/rust/lib/x86_64-apple-darwin'
ld: can't open output file for writing: test1, errno=21 for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: aborting due to previous error
$ rustc --version
rustc 1.0.0-dev
I've seen some topic related to this one but none of them helped me to solve the problem.
I was faced with three problems on Mac compiling Rust:
First: If you have any issue with writing files/dirs by ld just remove that files and try to recompile. I don't know why, but on Mac this issue happens time to time.
Second: If you have other ld errors (not about file access): try to add the following sections to your ~/.cargo/config (if you don't have this file feel free to create):
[target.x86_64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
[target.aarch64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
Third: Sometimes your Mac lack of some dev tools/dependencies. Install the most important of them automatically with the command:
xcode-select --install
From your command rustc test1.rs the compiler infers the name of the executable should be test1. The linker tries to open this file so it can write the executable but fails with errno=21 whose stringified version is "Is a directory".
This suggests you have a directory in your working directory called test1 which is causing a conflict.
if you have "note: /usr/bin/ld: cannot find -lsqlite3"
then install libsqlite3-dev: $ sudo apt install libsqlite3-dev
This works on Rust 1.53.0, Linux Mint 20.2(based on Ubuntu 20.04 LTS)
If you have a MacBook M1(x) with ARM processor you need to install rust from rustup https://sourabhbajaj.com/mac-setup/Rust/
When you run rustup-init, use the customize option to change aarch64-apple-darwin to x86_64-apple-darwin
Then you can add the following to .cargo/config.toml or .cargo/config (either is fine)
[target.x86_64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
This solution was tested with Rust 1.54 and MacBook M1
I was able to do a cargo build --release and generate a dylib file from this tutorial https://www.youtube.com/watch?v=yqLD22sIYMo
My rust project stopped building after updating my MacOS so this command fixed it for me
xcode-select --install
I had the same issue recently and I found out this solution that worked for me:
https://www.docker.com/blog/cross-compiling-rust-code-for-multiple-architectures/
On Running Rust on aarch64 I found out that libc6-dev-arm64-cross is need in order to compile rust successfully on aarch64.
i already discussed this issue with the maintainer of ruby-build and followed his advice by googling for similar errors. i found similar ones but they do not seem to match my specific problem:
i'm trying to install ruby with rbenv install 2.0.0-p247 (using the ruby-build plugin) on archlinux – but the command fails.
here the last 10 log lines:
rbconfig.rb updated
generating enc.mk
compiling dln.c
compiling encoding.c
generating prelude.c
compiling prelude.c
linking static-library libruby-static.a
verifying static-library libruby-static.a
collect2: error: ld returned 1 exit status
make: *** [libruby-static.a] Error 1
i would appreciate any hints on this problem – thanks!
To find out what's wrong here, the best bet is to run the Ruby installation yourself to see exactly what's amiss. ruby-build typically downloads and extracts Ruby in /tmp (it should be the same path where it also saves the log file of the failed install).
Go to that directory and run:
$ ./configure
$ make
To see if you get the same error. If you do, then try to re-run the command that failed again. In your case this is probably:
$ ranlib libruby-static.a
To see why it fails.
Trying to install the Miscellaneous Package into Octave, I get this string of errors:
octave-3.2.3:17> pkg install miscellaneous-1.0.9.tar.gz configure:
error: in
/var/folders/0o/0ox7a-rlFVGd8pZnuF96sE+++TM/-Tmp-/oct-zTlMUh/miscellaneous-1.0.9/src:
configure: error: C compiler cannot create executables See
config.log for more details. the configure script returned the
following error: checking for gcc... gcc checking for C compiler
default output file name... error: called from `pkg>configure_make
in file
/Applications/Octave.app/Contents/Resources/share/octave/3.2.3/m/pkg/pkg.m
near line 1240, column 2 error: called from: error:
/Applications/Octave.app/Contents/Resources/share/octave/3.2.3/m/pkg/pkg.m
at line 714, column 5 error:
/Applications/Octave.app/Contents/Resources/share/octave/3.2.3/m/pkg/pkg.m
at line 287, column 7
What is this trying to tell me? Where should I go?
Mike Briggs
I'm not sure it's related but if you are using the prepackaged Octave.app version 3.2.3 you need to reconfigure the file Octave.app/Contents/Resources/bin/mkoctfile-3.2.3 so that it will build installed packages in 32bit instead of 64bit...
The solution is to add the following snippet
CFLAGS="-m32 ${CFLAGS}"
FFLAGS="-m32 ${FFLAGS}"
CPPFLAGS="-m32 ${CPPFLAGS}"
CXXFLAGS="-m32 ${CXXFLAGS}"
LDFLAGS="-m32 ${LDFLAGS}"
in the file Octave.app/Contents/Resources/bin/mkoctfile-3.2.3 just after the "set -e" line. The problem was that in Snow Leopard compilers try always to build in 64bit, while libraries shipped with Octave are 32 bit. The -m32 flag forces the compiler to build 32bit
programs. - Guido
Original Post