Android ndk Android、CMake和静态链接
在将库项目构建从Android ndk Android、CMake和静态链接,android-ndk,cmake,Android Ndk,Cmake,在将库项目构建从Android.mk转换为CMakeLists.txt时,我遇到了避免未定义引用的问题。我正在使用一个名为和编译DCMTK的开源项目,并将其链接到静态库中。当我将每个静态库添加到目标链接库时,使用Android.mk通过ndk build进行构建,并使用gradle和以下CMakeLists.txt进行构建。但是,我想使用add_library来完成这项工作,并尝试了 add_library( lib_dcmdata STATIC IMPORTED ) set_target_pr
Android.mk
转换为CMakeLists.txt
时,我遇到了避免未定义引用的问题。我正在使用一个名为和编译DCMTK的开源项目,并将其链接到静态库中。当我将每个静态库添加到目标链接库时,使用Android.mk
通过ndk build
进行构建,并使用gradle
和以下CMakeLists.txt
进行构建。但是,我想使用add_library
来完成这项工作,并尝试了
add_library( lib_dcmdata STATIC IMPORTED )
set_target_properties( lib_dcmdata
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmdata.a )
然后将它们添加到目标链接库。这导致大量未定义的引用。我还尝试通过将静态库分组为一个目标来设置_target_属性,但这也不起作用
依赖链接的顺序在某种程度上是不同的,还是CMake使用add\u library
set\u target\u properties
方法处理这些库的方式不同
CMakeLists.txt
虽然我不确定是否要添加所有静态库的导入位置,但将工作依赖顺序分解为库确实有效。您可以使用for循环或编写函数或两者都可以很容易地改进此代码
cmake_minimum_required( VERSION 3.6 )
project( dicom-jni )
set( SOURCE_FILES
dicom.cpp
dicom.hpp )
add_library( lib_dcmrt STATIC IMPORTED )
set_target_properties( lib_dcmrt
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmrt.a )
add_library( lib_dcmpstat STATIC IMPORTED )
set_target_properties( lib_dcmpstat
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmpstat.a )
add_library( lib_dcmqrdb STATIC IMPORTED )
set_target_properties( lib_dcmqrdb
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmqrdb.a )
add_library( lib_dcmwlm STATIC IMPORTED )
set_target_properties( lib_dcmwlm
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmwlm.a )
add_library( lib_dcmdsig STATIC IMPORTED )
set_target_properties( lib_dcmdsig
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmdsig.a )
add_library( lib_dcmnet STATIC IMPORTED )
set_target_properties( lib_dcmnet
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmnet.a )
add_library( lib_dcmjpeg STATIC IMPORTED )
set_target_properties( lib_dcmjpeg
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmjpeg.a )
add_library( lib_dcmjpls STATIC IMPORTED )
set_target_properties( lib_dcmjpls
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmjpls.a )
add_library( lib_charls STATIC IMPORTED )
set_target_properties( lib_charls
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libcharls.a )
add_library( lib_ijg16 STATIC IMPORTED )
set_target_properties( lib_ijg16
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg16.a )
add_library( lib_ijg12 STATIC IMPORTED )
set_target_properties( lib_ijg12
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg12.a )
add_library( lib_ijg8 STATIC IMPORTED )
set_target_properties( lib_ijg8
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg8.a )
add_library( lib_dcmimage STATIC IMPORTED )
set_target_properties( lib_dcmimage
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmimage.a )
add_library( lib_dcmimgle STATIC IMPORTED )
set_target_properties( lib_dcmimgle
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmimgle.a )
add_library( lib_i2d STATIC IMPORTED )
set_target_properties( lib_i2d
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libi2d.a )
add_library( lib_dcmdata STATIC IMPORTED )
set_target_properties( lib_dcmdata
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmdata.a )
add_library( lib_oflog STATIC IMPORTED )
set_target_properties( lib_oflog
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/liboflog.a )
add_library( lib_ofstd STATIC IMPORTED )
set_target_properties( lib_ofstd
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libofstd.a )
add_library( lib_iconv STATIC IMPORTED )
set_target_properties( lib_iconv
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/iconv/${ANDROID_ABI}/lib/libiconv.a )
add_library( lib_charset STATIC IMPORTED )
set_target_properties( lib_charset
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/iconv/${ANDROID_ABI}/lib/libcharset.a )
find_library( lib_jnigraphics jnigraphics )
find_library( lib_android-log log )
add_library( dicom-jni SHARED ${SOURCE_FILES} )
target_include_directories( dicom-jni PRIVATE
prebuilt_libs/dcmtk/${ANDROID_ABI}/include
prebuilt_libs/iconv/${ANDROID_ABI}/include
logger )
target_link_libraries( dicom-jni
lib_dcmrt
lib_dcmpstat
lib_dcmqrdb
lib_dcmwlm
lib_dcmdsig
lib_dcmnet
lib_dcmjpeg
lib_dcmjpls
lib_charls
lib_ijg16
lib_ijg12
lib_ijg8
lib_dcmimage
lib_dcmimgle
lib_i2d
lib_dcmdata
lib_oflog
lib_ofstd
lib_iconv
lib_charset
z
dl
stdc++
${lib_jnigraphics}
${lib_android-log} )
cmake_minimum_required( VERSION 3.6 )
project( dicom-jni )
set( SOURCE_FILES
dicom.cpp
dicom.hpp )
add_library( lib_dcmrt STATIC IMPORTED )
set_target_properties( lib_dcmrt
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmrt.a )
add_library( lib_dcmpstat STATIC IMPORTED )
set_target_properties( lib_dcmpstat
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmpstat.a )
add_library( lib_dcmqrdb STATIC IMPORTED )
set_target_properties( lib_dcmqrdb
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmqrdb.a )
add_library( lib_dcmwlm STATIC IMPORTED )
set_target_properties( lib_dcmwlm
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmwlm.a )
add_library( lib_dcmdsig STATIC IMPORTED )
set_target_properties( lib_dcmdsig
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmdsig.a )
add_library( lib_dcmnet STATIC IMPORTED )
set_target_properties( lib_dcmnet
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmnet.a )
add_library( lib_dcmjpeg STATIC IMPORTED )
set_target_properties( lib_dcmjpeg
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmjpeg.a )
add_library( lib_dcmjpls STATIC IMPORTED )
set_target_properties( lib_dcmjpls
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmjpls.a )
add_library( lib_charls STATIC IMPORTED )
set_target_properties( lib_charls
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libcharls.a )
add_library( lib_ijg16 STATIC IMPORTED )
set_target_properties( lib_ijg16
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg16.a )
add_library( lib_ijg12 STATIC IMPORTED )
set_target_properties( lib_ijg12
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg12.a )
add_library( lib_ijg8 STATIC IMPORTED )
set_target_properties( lib_ijg8
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libijg8.a )
add_library( lib_dcmimage STATIC IMPORTED )
set_target_properties( lib_dcmimage
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmimage.a )
add_library( lib_dcmimgle STATIC IMPORTED )
set_target_properties( lib_dcmimgle
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmimgle.a )
add_library( lib_i2d STATIC IMPORTED )
set_target_properties( lib_i2d
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libi2d.a )
add_library( lib_dcmdata STATIC IMPORTED )
set_target_properties( lib_dcmdata
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libdcmdata.a )
add_library( lib_oflog STATIC IMPORTED )
set_target_properties( lib_oflog
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/liboflog.a )
add_library( lib_ofstd STATIC IMPORTED )
set_target_properties( lib_ofstd
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/dcmtk/${ANDROID_ABI}/lib/libofstd.a )
add_library( lib_iconv STATIC IMPORTED )
set_target_properties( lib_iconv
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/iconv/${ANDROID_ABI}/lib/libiconv.a )
add_library( lib_charset STATIC IMPORTED )
set_target_properties( lib_charset
PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/prebuilt_libs/iconv/${ANDROID_ABI}/lib/libcharset.a )
find_library( lib_jnigraphics jnigraphics )
find_library( lib_android-log log )
add_library( dicom-jni SHARED ${SOURCE_FILES} )
target_include_directories( dicom-jni PRIVATE
prebuilt_libs/dcmtk/${ANDROID_ABI}/include
prebuilt_libs/iconv/${ANDROID_ABI}/include
logger )
target_link_libraries( dicom-jni
lib_dcmrt
lib_dcmpstat
lib_dcmqrdb
lib_dcmwlm
lib_dcmdsig
lib_dcmnet
lib_dcmjpeg
lib_dcmjpls
lib_charls
lib_ijg16
lib_ijg12
lib_ijg8
lib_dcmimage
lib_dcmimgle
lib_i2d
lib_dcmdata
lib_oflog
lib_ofstd
lib_iconv
lib_charset
z
dl
stdc++
${lib_jnigraphics}
${lib_android-log} )