Unreal Engine 4 Build Failing - error while loading shared libraries

Hello all,

I have been using the “Multiplayer with Blueprints” plugin to create a multiplayer game in UE4 using GameLift with success. However, I would like to use an additional plugin in my project (this one) yet every build that uses this plugin crashes on start-up on the remote machine. When I create a fleet with a build that utilizes this plugin it crashes on the ACTIVATING step with no logs, and this is the message I get when I attempt to run the build after ssh’ing into the machine:
error while loading shared libraries: libmpg123.so.0: cannot open shared object file: No such file or directory

libmpg123.so is present in the build in the directory \Engine\Plugins\Marketplace\AudioAnalyzer\Source\Thirdparty\MPG123\Libraries\Linux.

Is there a way I can direct the program to this file properly or is this indicative of deeper incompatibilities between the plugin and GameLift servers?

Thanks so much for the help,
Tom

Where is your executable in relation to this lib?

By default, ldconfig looks in /lib, /usr/lib, and directories listed in /etc/ld.so.conf and $LD_LIBRARY_PATH. If your library is somewhere else, you can either add the directory on its own line in /etc/ld.so.conf, append the library’s path to $LD_LIBRARY_PATH, or move the library into /usr/lib. Then run ldconfig [or set the rpath correctly during linking]

Basically it sounds like on gamelift the path to the library is not being resolved correctly. If you are setting the rpath at link time, ensure its a relative path or a path that makes sense on GameLift (running out of /local/game ?)

Do you have a mechanism to test your gamelift package prior to upload ie via GameLift local?

Some useful references:

1 Like

Hi Pan,

Thanks for your detailed response. Copying the library in question to /usr/lib and running ldconfig before running seems to have done the trick. My last question would be this: is it possible to do the above without needing to ssh into the the machine and copy the files/run ldconfig manually each time I upload a build? Like change the /usr/lib directory for each fleet I create automatically?

Thanks so much for your help,
Tom

You should be able to use the install.sh mechanism to prepare your instance as required. This is a great way to install libs and add things to the path.

See Upload a custom server build to GameLift - Amazon GameLift