Jetson AGX Orin 编译 Insight Toolkit (ITK) 5.1.1
1:下载ITK
Insight Toolkit (ITK) 5.1.1
2:上传到Jetson并解压缩
tar zxvf InsightToolkit-5.1.1.tar.gz
3:编译
mkdir build && cd build
sudo cmake ..
sudo make -j8
sudo make install
如果出现下面的错误(可以看出这是在arm架构编译png驱动对某个预编译宏不兼容造成的,解决办法是在pngpriv.h中添加#define PNG_ARM_NEON_OPT 0,关闭对png_riffle_palette_neon函数的调用):
[100%] Building CXX object Modules/Core/TestKernel/src/CMakeFiles/itkTestDriver.dir/itkTestDriver.cxx.o
[100%] Linking CXX executable ../../../../bin/itkTestDriver
../../../../lib/libitkpng-5.1.a(pngrtran.c.o):pngrtran.c:function itk_png_do_read_transformations: error: undefined reference to 'png_do_expand_palette_rgba8_neon'
../../../../lib/libitkpng-5.1.a(pngrtran.c.o):pngrtran.c:function itk_png_do_read_transformations: error: undefined reference to 'png_riffle_palette_neon'
../../../../lib/libitkpng-5.1.a(pngrtran.c.o):pngrtran.c:function itk_png_do_read_transformations: error: undefined reference to 'png_do_expand_palette_rgb8_neon'
../../../../lib/libitkpng-5.1.a(pngrutil.c.o):pngrutil.c:function itk_png_read_filter_row: error: undefined reference to 'png_init_filter_functions_neon'
collect2: error: ld returned 1 exit status
make[2]: *** [Modules/Core/TestKernel/src/CMakeFiles/itkTestDriver.dir/build.make:166: bin/itkTestDriver] Error 1
make[1]: *** [CMakeFiles/Makefile2:12345: Modules/Core/TestKernel/src/CMakeFiles/itkTestDriver.dir/all] Error 2
make: *** [Makefile:156: all] Error 2
修改文件 InsightToolkit-5.1.1/Modules/ThirdParty/PNG/src/itkpng/pngpriv.h
添加下面内容:
#define PNG_ARM_NEON_OPT 0 ***// 这行为 添加的代码。***
#ifndef PNG_ARM_NEON_OPT
/* ARM NEON optimizations are being controlled by the compiler settings,
* typically the target FPU. If the FPU has been set to NEON (-mfpu=neon
* with GCC) then the compiler will define __ARM_NEON__ and we can rely
* unconditionally on NEON instructions not crashing, otherwise we must
* disable use of NEON instructions.
*
* NOTE: at present these optimizations depend on 'ALIGNED_MEMORY', so they
* can only be turned on automatically if that is supported too. If
* PNG_ARM_NEON_OPT is set in CPPFLAGS (to >0) then arm/arm_init.c will fail
* to compile with an appropriate #error if ALIGNED_MEMORY has been turned
* off.
*
* Note that gcc-4.9 defines __ARM_NEON instead of the deprecated
* __ARM_NEON__, so we check both variants.
*
* To disable ARM_NEON optimizations entirely, and skip compiling the
* associated assembler code, pass --enable-arm-neon=no to configure
* or put -DPNG_ARM_NEON_OPT=0 in CPPFLAGS.
*/
#if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
defined(PNG_ALIGNED_MEMORY_SUPPORTED)
#define PNG_ARM_NEON_OPT 2
#else
#define PNG_ARM_NEON_OPT 0
#endif
#endif
4:测试
#include "itkImage.h"
#include <iostream>
int main()
{
typedef itk::Image< unsigned short, 3 > ImageType;
ImageType::Pointer image = ImageType::New();
std::cout << "Hello ITK World !" << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)
project(HelloInsight)
# Find ITK.
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloInsight HelloInsight.cpp )
target_link_libraries(HelloInsight ${ITK_LIBRARIES})
mkdir build && cd build
cmake ..
make
./HelloInsight