Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@dagood
Last active April 13, 2022 01:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dagood/05200cc37be277448928e1d920b445d5 to your computer and use it in GitHub Desktop.
Save dagood/05200cc37be277448928e1d920b445d5 to your computer and use it in GitHub Desktop.
FROM buildpack-deps:bullseye-scm
RUN apt update \
&& apt install -y --no-install-recommends \
g++ \
gcc \
libc6-dev \
make \
wget \
&& ldd --version
RUN v=1.18; \
t=go$v.linux-amd64.tar.gz; \
wget -q https://go.dev/dl/$t -O $t \
&& tar -xf $t
ADD foo.c .
RUN gcc -fPIC -c foo.c \
&& gcc -shared -o foo.so -pthread foo.o
ADD . .
RUN go/bin/go run .
FROM buildpack-deps:bullseye-scm
RUN apt update \
&& apt install -y --no-install-recommends \
g++ \
gcc \
libc6-dev \
make \
wget \
&& ldd --version
RUN v=1.17.8; \
t=go$v.linux-amd64.tar.gz; \
wget -q https://go.dev/dl/$t -O $t \
&& tar -xf $t
ADD foo.c .
RUN gcc -fPIC -c foo.c \
&& gcc -shared -o foo.so -pthread foo.o
ADD . .
RUN go/bin/go run .
FROM fedora:35
RUN dnf install -y \
g++ \
gcc \
glibc-static \
make \
wget \
&& ldd --version
RUN v=1.18; \
t=go$v.linux-amd64.tar.gz; \
wget -q https://go.dev/dl/$t -O $t \
&& tar -xf $t
ADD foo.c .
RUN gcc -fPIC -c foo.c \
&& gcc -shared -o foo.so -pthread foo.o
ADD . .
RUN go/bin/go run .
FROM buildpack-deps:bullseye-scm
RUN apt update \
&& apt install -y --no-install-recommends \
g++ \
gcc \
libc6-dev \
make \
wget \
&& ldd --version
RUN v=1.18; \
t=go$v.linux-amd64.tar.gz; \
wget -q https://go.dev/dl/$t -O $t \
&& tar -xf $t
ADD foo.c .
RUN gcc -fPIC -c -pthread foo.c \
&& gcc -shared -o foo.so -pthread foo.o
ADD . .
RUN go/bin/go run .
#include <pthread.h>
#include <stdlib.h>
pthread_mutex_t *lock_new(void)
{
pthread_mutex_t *lock = malloc(sizeof(pthread_mutex_t));
pthread_mutex_lock(lock);
return lock;
}
module example
go 1.18
package main
/*
#include <dlfcn.h>
#include <unistd.h>
#cgo LDFLAGS: -ldl -static
*/
import "C"
import "fmt"
func main() {
fmt.Println("Step 1")
if C.dlopen(C.CString("./foo.so"), C.RTLD_NOW) == nil {
panic("library not found")
}
fmt.Println("Step 2")
C.setgid(0)
fmt.Println("Step 3")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment