平台: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
}
若有异议,请留言,谢谢!