3
$\begingroup$

I am running CentOS 7 and I was trying to test the latest builds of Blender. However, every time I try running it, I keep getting the following error:

error while loading shared libraries: libmvec.so.1: cannot open shared object file: No such file or directory

Looking online, I found out the libmvec is vector math library that was added in Glibc 2.22. Since the newest Glibc version in CentOS is 2.17, it made sense that I wouldn't have it. Therefore, I compiled a newer version of Glibc, installed it in a location different from the main one, and added the new path to the LD_LIBRARY_PATH environment variable. However, I still get the same error. It is as if Blender cannot see the new version I installed.

Is there a way I can force Blender to use the libraries from this new Glibc version? I am trying to avoid having to change distros as I have other programs that rely heavily on CentOS.

$\endgroup$
  • $\begingroup$ You could try to add a symlink to the new library and place it in the directory where blender is actually looking. Just a guess. $\endgroup$ – michaelh Oct 20 '18 at 10:50
  • $\begingroup$ I symlinked it in /usr/lib, /usr/lib64 and even in Blender's own lib directory and it still didn't work. I am not sure if Blender is looking for it in a different folder. $\endgroup$ – Abdelrahman Said Oct 20 '18 at 11:40
1
$\begingroup$

There is a debug tool on linux: "strace"

In blender directory:

strace ./blender-softwaregl --background

or

strace ./blender --background

You can watch the system calls, e.g. the "open" calls too. It will show the path in "open" calls.

example:

user$ strace ./blender-softwaregl --background
..
..
open("/lib/libmvec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/x86_64/libmvec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64", 0x7ffe99686660) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libmvec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7ffe99686660)    = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libmvec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7ffe99686660) = -1 ENOENT (No such file or directory)
open("/usr/lib/libmvec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
writev(2, [{"./blender", 9}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libmvec.so.1", 12}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10./blender: error while loading shared libraries: libmvec.so.1: cannot open shared object file: No such file or directory
) = 121
exit_group(127)                         = ?
+++ exited with 127 +++

-- UPDATE2 --

You can see the paths where "blender" tries to open the libmvec.so.1 file. Pick a path and you could try to add a symlink to the compiled glibc directory.

I don't have a CentOS 7 box, but I have an old Ubuntu machine

-- The whole operation on Ubuntu --

Compile glibc-2.24 on Ubuntu 14.04:

cd ~
wget https://ftp.gnu.org/gnu/libc/glibc-2.24.tar.gz
tar -xvzf ./glibc-2.24.tar.gz
cd glibc-2.24
mkdir _build
cd _build

Your kernel version on CentOs may be different. My kernel version is 3.13. You can get your kernel version by uname -a command on linux.

../configure --enable-kernel=3.13 --prefix=/usr
make

If there is no error on compile, you are done.

Symlinking

Download blender 2.80 beta from https://builder.blender.org/download/ and extract it. Navigate to blender's main folder and:

cd lib
ln -s ~/glibc-2.24/_build/mathvec/libmvec.so ./libmvec.so.1
ln -s ~/glibc-2.24/_build/math/libm.so ./libm.so.6

GO

Navigate to blender's main folder.

headless version:

./blender-softwaregl --background --python-console

gui version:

./blender

It works for me on Ubuntu 14.04

| improve this answer | |
$\endgroup$
  • $\begingroup$ Okay, so after I do this, then what? $\endgroup$ – Anson Savage Jan 1 '19 at 6:45
  • $\begingroup$ I couldn't add a comment on the question because I don't have enough reputation yet. I have completed my answer. $\endgroup$ – z5ottu Jan 3 '19 at 13:47
  • $\begingroup$ Type uname -a to show kernel version. $\endgroup$ – Nick Jan 15 '19 at 3:10
  • $\begingroup$ Updated.. uname -a for kernel version of course. Thank you Nick. $\endgroup$ – z5ottu Jan 20 '19 at 19:40
  • $\begingroup$ I am having the same situation and I followed the instructions on the compile library and now I got stuck after I try to start blender and I get this: ./blender: /lib64/libstdc++.so.6: version CXXABI_1.3.8' not found (required by ./lib/libGL.so.1) ./blender: /lib64/libstdc++.so.6: versionGLIBCXX_3.4.21' not found (required by ./lib/libGL.so.1) ./blender: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by ./lib/libGL.so.1) ./blender: /lib64/libstdc++.so.6: versionCXXABI_1.3.9' not found (required by ./lib/libGL.so.1) Any tips? Thanks. $\endgroup$ – Michel Martins Zigaib Mar 23 '19 at 15:13

Not the answer you're looking for? Browse other questions tagged or ask your own question.