TensorRT接口封装成功能库出现的error

平台:TX2 JetPack3.3

语言: C++

ide:Qt

遇到的error:

参考:https://www.cnblogs.com/octave/p/4824584.html

https://www.cnblogs.com/techiel/p/8035014.html

 unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `__stack_chk_guard@@GLIBC_2.17'
relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `__stack_chk_guard@@GLIBC_2.17' can 
not be used when making a shared object; recompile with -fPIC

该问题是由于将TensorRT接口封装成.so(动态库)时,动态库会自动加入“-fPIC”,若需要链接第三方.a(静态库)时,如果静态库编译没有加入“-fPIC”则无法调用第三方库。

问题是如何在编译第三方静态库时加入“-fPIC”?

网上很多方法是在.pro文件中加入 :

QMAKE_CFLAGS +=-fPIC

QMAKE_CFLAGS    +=  -fPIC
QMAKE_CXXFLAGS  +=  -fPIC

查看编译结果中的makefile文件发现系统已经默认添加了,所以再这样添加“-fPIC”根本不起任何作用,正确的做法是添加“-Xcompiler -fPIC”,添加后效果是这样的:

CONFIG(debug, debug|release) {
     # Debug mode
     cuda_d.input = CUDA_SOURCES
     cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
     cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -Xcompiler -fPIC -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.dependency_type = TYPE_C
     QMAKE_EXTRA_COMPILERS += cuda_d
 }
 else {
     # Release mode
     cuda.input = CUDA_SOURCES
     cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
     cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -Xcompiler -fPIC -arch=$$CUDA_ARCH -O3 -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
     cuda.dependency_type = TYPE_C
     QMAKE_EXTRA_COMPILERS += cuda
}

若有异议,请留言,谢谢!

你可能感兴趣的:(TensorRT)