Showing results for 
Show  only  | Search instead for 
Did you mean: 

Golang SDK - cannot open shared object file


 I've build a simple Golang application and have packaged it inside Docker, building off of the image '



When I run the built app I get this error:


/usr/local/bin # ./golang-example-app
./golang-example-app: error while loading shared libraries: cannot open shared object file: No such file or directory


Trying to fix it, I copied the AppDynamics Golang SDK folder underneath /usr/local/bin:


/usr/local/bin # ls -al
total 2432
drwxr-xr-x 4 root root 4096 Nov 22 15:03 .
drwxr-xr-x 6 root root 4096 Nov 22 15:03 ..
drwxr-xr-x 3 root root 4096 Nov 22 15:03 appdynamics
-rwxr-xr-x 1 root root 2473864 Nov 22 05:19 golang-example-app
-rwxr-xr-x 1 root root 238 Nov 21 17:47
/usr/local/bin # ls -l appdynamics/
total 544
-rw-r--r-- 1 root root 1917 Nov 22 14:58
-rw-r--r-- 1 root root 91 Nov 22 14:58 VERSION
-rw-r--r-- 1 root root 22393 Nov 22 14:58 appdynamics.go
-rw-r--r-- 1 root root 279504 Nov 22 14:58 ca-bundle.crt
-rw-r--r-- 1 root root 236061 Nov 22 14:58 ca-bundle.crt.moveaway
drwxr-xr-x 3 root root 4096 Nov 22 14:58 sdk_lib



I still get this error when running.


Do I need to "install" the '' file in a certain location so it can be found by the Golang app?


AppDynamics Team

Hi David,


You don't want to have appdynamics/ directory in /usr/local/bin/.


Try moving your golang-example-app in to the appdynamics/ directory and running it there.


In your specific case:


mv -v /usr/local/bin/golang-example-app /usr/local/bin/appdynamics/;
mv -v /usr/local/bin/appdynamics /;  # keep bin/ tidy.
cd /appdynamics; ./golang-example-app;


For additional information see:


If anyone still faces the same issue, for golang-sdk-x64-linux- which I am using now, I managed to to fix my multi-stage Dockerfile as follows:


# stage 2 - build deployment
# required version of glibc shared libraries are not found in alpine,
therefore follow development environment, use ubuntu
FROM ubuntu:18.04

RUN apt-get update \
    && apt-get install -y wget \
    && rm -rf /var/lib/apt/lists/*


    wget -qO/bin/grpc_health_probe${GRPC_HEALTH_PROBE_VERSION}/g... && \
    chmod +x /bin/grpc_health_probe



ENTRYPOINT ["/<yourExecutable>"]


If anyone is still having this issue for golang-sdk-x64-linux- and couldn't get it working from Sebastian's fix above, that is because you still need to add the appdynamics-golang-sdk library on to the shared library folder within Linux.


In a brief summary, in Linux when an executable is looking for a dynamic library (.so file) the linker tries several directories, including directories on the system search path, which consists of entries in /etc/ plus /lib and /usr/lib. For more information please check this Unix stackexchange reply.


The Dockerfile should look as follows:


FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*

COPY appdynamics/lib /lib



ENTRYPOINT ["/<yourExecutable>"]


Hope that helps!