JuliaPackaging / BinaryBuilderBase.jl

https://juliapackaging.github.io/BinaryBuilderBase.jl/stable
MIT License
11 stars 31 forks source link

[Runner] Fix inclusion of `lib64` for PowerPC64 with GCC 6 #333

Closed giordano closed 11 months ago

giordano commented 11 months ago

Tested with test.c:

#include <dlfcn.h>

void foo() {
    dlclose(dlopen("libc.so", RTLD_LOCAL | RTLD_LAZY));
}

main.c:

void foo();

int main(void) {
    foo();
    return 0;
}

Makefile:

main: main.c libtest.so
    SUPER_VERBOSE=1 cc -L. -o main main.c -ltest

libtest.so: test.c
    SUPER_VERBOSE=1 cc -shared -o libtest.so test.c -ldl

Before this PR:

% julia --compile=min -e 'using BinaryBuilderBase; BinaryBuilderBase.runshell(Platform("powerpc64le", "linux"); preferred_gcc_version = v"6")'
sandbox:${WORKSPACE} # make -B
SUPER_VERBOSE=1 cc -shared -o libtest.so test.c -ldl
ccache /opt/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -D_GLIBCXX_USE_CXX11_ABI=1 -frandom-seed=0x9847abb0 -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -mcpu=power8 -mtune=power8 -shared -o libtest.so test.c -ldl
SUPER_VERBOSE=1 cc -L. -o main main.c -ltest
ccache /opt/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -D_GLIBCXX_USE_CXX11_ABI=1 -frandom-seed=0x0c79acbb -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -mcpu=power8 -mtune=power8 -L. -o main main.c -ltest
/opt/powerpc64le-linux-gnu/bin/../lib/gcc/powerpc64le-linux-gnu/6.1.0/../../../../powerpc64le-linux-gnu/bin/ld: warning: libdl.so.2, needed by ./libtest.so, not found (try using -rpath or -rpath-link)
./libtest.so: undefined reference to `dlopen@GLIBC_2.17'
./libtest.so: undefined reference to `dlclose@GLIBC_2.17'
collect2: error: ld returned 1 exit status
make: *** [Makefile:2: main] Error 1

with this PR:

% julia --compile=min -e 'using BinaryBuilderBase; BinaryBuilderBase.runshell(Platform("powerpc64le", "linux"); preferred_gcc_version = v"6")'
sandbox:${WORKSPACE} # make -B
SUPER_VERBOSE=1 cc -shared -o libtest.so test.c -ldl
ccache /opt/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -D_GLIBCXX_USE_CXX11_ABI=1 -frandom-seed=0x9847abb0 -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -mcpu=power8 -mtune=power8 -shared -o libtest.so test.c -ldl -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sys-root/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sys-root/lib64
SUPER_VERBOSE=1 cc -L. -o main main.c -ltest
ccache /opt/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -D_GLIBCXX_USE_CXX11_ABI=1 -frandom-seed=0x0c79acbb -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/lib64 -mcpu=power8 -mtune=power8 -L. -o main main.c -ltest -L/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sys-root/lib64 -Wl,-rpath-link,/opt/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sys-root/lib64
sandbox:${WORKSPACE} # 

Problem spotted at https://github.com/JuliaPackaging/Yggdrasil/pull/7501.