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

$\endgroup$
  • $\begingroup$ Okay, so after I do this, then what? $\endgroup$ – Anson Savage Jan 1 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 at 13:47
  • $\begingroup$ Type uname -a to show kernel version. $\endgroup$ – Nick Jan 15 at 3:10
  • $\begingroup$ Updated.. uname -a for kernel version of course. Thank you Nick. $\endgroup$ – z5ottu Jan 20 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 at 15:13

protected by cegaton May 9 at 19:17

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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