I've been trying to build open3d from source on the l4t-base:r32.5.0 IMG from NVIDIA for quite some time now and have basically searched the whole internet for a script/guide, but I can't seem to find anything or get it to work myself.
Following the exact steps stated on http://www.open3d.org/docs/release/arm.html I get the following output while running the following Dockerfile
Dockerfile
FROM dustynv/ros:foxy-ros-base-l4t-r32.5.0
WORKDIR /workspace
##########################
### CMAKE INSTALLATION ###
##########################
RUN wget https://github.com/Kitware/CMake/releases/download/v3.20.6/cmake-3.20.6-linux-aarch64.tar.gz
RUN tar -v -xzf cmake-3.20.6-linux-aarch64.tar.gz
RUN mv cmake-3.20.6-linux-aarch64 cmake
RUN echo "alias cmake='/workspace/cmake/bin/cmake'" >> /root/.bashrc
RUN source /root/.bashrc && cmake --version
#################################
### OPEN3D 0.13.0 INSTALLTION ###
#################################
RUN wget https://github.com/isl-org/Open3D/archive/refs/tags/v0.13.0.tar.gz
RUN tar -v -xzf v0.13.0.tar.gz
RUN mv Open3D-0.13.0 open3d
RUN apt-get update && apt-get install xorg-dev libglu1-mesa-dev -y
RUN cd open3d && mkdir build && cd build && \
/workspace/cmake/bin/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_CUDA_MODULE=OFF \
-DBUILD_GUI=OFF \
-DBUILD_TENSORFLOW_OPS=OFF \
-DBUILD_PYTORCH_OPS=OFF \
-DBUILD_UNIT_TESTS=ON \
-DCMAKE_INSTALL_PREFIX=~/open3d_install \
-DPYTHON_EXECUTABLE=/usr/bin/python3 \
..
ErrorLog
Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /workspace/open3d/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_d15b1/fast && /usr/bin/make -f CMakeFiles/cmTC_d15b1.dir/build.make CMakeFiles/cmTC_d15b1.dir/build
make[1]: Entering directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_d15b1.dir/src.c.o
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -fPIE -o CMakeFiles/cmTC_d15b1.dir/src.c.o -c /workspace/open3d/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_d15b1
/workspace/cmake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d15b1.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/cmTC_d15b1.dir/src.c.o -o cmTC_d15b1
CMakeFiles/cmTC_d15b1.dir/src.c.o: In function `main':
src.c:(.text+0x48): undefined reference to `pthread_create'
src.c:(.text+0x50): undefined reference to `pthread_detach'
src.c:(.text+0x58): undefined reference to `pthread_cancel'
src.c:(.text+0x64): undefined reference to `pthread_join'
src.c:(.text+0x74): undefined reference to `pthread_atfork'
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_d15b1.dir/build.make:98: recipe for target 'cmTC_d15b1' failed
make[1]: *** [cmTC_d15b1] Error 1
make[1]: Leaving directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Makefile:127: recipe for target 'cmTC_d15b1/fast' failed
make: *** [cmTC_d15b1/fast] Error 2
Source file was:
#include <pthread.h>
static void* test_func(void* data)
{
return data;
}
int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, test_func, NULL);
pthread_detach(thread);
pthread_cancel(thread);
pthread_join(thread, NULL);
pthread_atfork(NULL, NULL, NULL);
pthread_exit(NULL);
return 0;
}
Looking for a ASM_NASM compiler failed with the following output:
-- The ASM_NASM compiler identification is unknown
-- Didn't find assembler
CMake Error at CMakeLists.txt:2 (project):
No CMAKE_ASM_NASM_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable "ASM_NASM" or the CMake cache entry CMAKE_ASM_NASM_COMPILER to the
full path to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "/workspace/open3d/build/CMakeFiles/CheckASM_NASM/CMakeFiles/CMakeOutput.log".
See also "/workspace/open3d/build/CMakeFiles/CheckASM_NASM/CMakeFiles/CMakeError.log".
Determining if the function sgemm_ exists failed with the following output:
Change Dir: /workspace/open3d/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_855e0/fast && /usr/bin/make -f CMakeFiles/cmTC_855e0.dir/build.make CMakeFiles/cmTC_855e0.dir/build
make[1]: Entering directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_855e0.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=sgemm_ -fPIE -o CMakeFiles/cmTC_855e0.dir/CheckFunctionExists.c.o -c /workspace/cmake/share/cmake-3.20/Modules/CheckFunctionExists.c
Linking C executable cmTC_855e0
/workspace/cmake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_855e0.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=sgemm_ CMakeFiles/cmTC_855e0.dir/CheckFunctionExists.c.o -o cmTC_855e0
CMakeFiles/cmTC_855e0.dir/CheckFunctionExists.c.o: In function `main':
CheckFunctionExists.c:(.text+0x10): undefined reference to `sgemm_'
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_855e0.dir/build.make:98: recipe for target 'cmTC_855e0' failed
make[1]: *** [cmTC_855e0] Error 1
make[1]: Leaving directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Makefile:127: recipe for target 'cmTC_855e0/fast' failed
make: *** [cmTC_855e0/fast] Error 2
Determining if the function cheev_ exists failed with the following output:
Change Dir: /workspace/open3d/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_3a46a/fast && /usr/bin/make -f CMakeFiles/cmTC_3a46a.dir/build.make CMakeFiles/cmTC_3a46a.dir/build
make[1]: Entering directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_3a46a.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=cheev_ -fPIE -o CMakeFiles/cmTC_3a46a.dir/CheckFunctionExists.c.o -c /workspace/cmake/share/cmake-3.20/Modules/CheckFunctionExists.c
Linking C executable cmTC_3a46a
/workspace/cmake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3a46a.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=cheev_ CMakeFiles/cmTC_3a46a.dir/CheckFunctionExists.c.o -o cmTC_3a46a /usr/lib/aarch64-linux-gnu/libblas.so -pthread -lm -ldl
CMakeFiles/cmTC_3a46a.dir/CheckFunctionExists.c.o: In function `main':
CheckFunctionExists.c:(.text+0x10): undefined reference to `cheev_'
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_3a46a.dir/build.make:99: recipe for target 'cmTC_3a46a' failed
make[1]: *** [cmTC_3a46a] Error 1
make[1]: Leaving directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Makefile:127: recipe for target 'cmTC_3a46a/fast' failed
make: *** [cmTC_3a46a/fast] Error 2
Determining if the function LAPACKE_dgeqrf exists failed with the following output:
Change Dir: /workspace/open3d/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_9905d/fast && /usr/bin/make -f CMakeFiles/cmTC_9905d.dir/build.make CMakeFiles/cmTC_9905d.dir/build
make[1]: Entering directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_9905d.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=LAPACKE_dgeqrf -fPIE -o CMakeFiles/cmTC_9905d.dir/CheckFunctionExists.c.o -c /workspace/cmake/share/cmake-3.20/Modules/CheckFunctionExists.c
Linking C executable cmTC_9905d
/workspace/cmake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9905d.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=LAPACKE_dgeqrf CMakeFiles/cmTC_9905d.dir/CheckFunctionExists.c.o -o cmTC_9905d /usr/lib/aarch64-linux-gnu/liblapack.so /usr/lib/aarch64-linux-gnu/libblas.so
CMakeFiles/cmTC_9905d.dir/CheckFunctionExists.c.o: In function `main':
CheckFunctionExists.c:(.text+0x10): undefined reference to `LAPACKE_dgeqrf'
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_9905d.dir/build.make:100: recipe for target 'cmTC_9905d' failed
make[1]: *** [cmTC_9905d] Error 1
make[1]: Leaving directory '/workspace/open3d/build/CMakeFiles/CMakeTmp'
Makefile:127: recipe for target 'cmTC_9905d/fast' failed
make: *** [cmTC_9905d/fast] Error 2
Problem:
I want to build open3d from source on an arm docker img with a Dockerfile. More specifically, the l4t-base:r32.5.0 img provided by NVIDIA. This image will be used on a Jetson XavierNX with docker installed.
Above you can see what I have tried so far in terms of Dockerfile and the output this gives me.
What I am asking is, if anyone has a Dockerfile for building open3d from source on an arm based image or knows how to do it successfully, because I cannot seem to be able to do it.