对本地对象的未定义引用
Undefined references to local objects
我在使用 nvcc 链接项目时遇到问题。它们与项目内部定义的符号一起出现。我在 cuda_bvh_constru.o 文件中定义了一些函数符号。这是相关函数的 nm 输出:
nm cuda_bvh_constru.o | grep update
0000000000001376 t _ZN20BVHConstructionState14updateGeometryERK6float3S2_
0000000000000b70 t _ZN20BVHConstructionState19updateGeometry_wobbER6float3S1_
These symbols are need on the cuda_bvhexports.o file but always appears undefined:
nm cuda_bvhexports.o | grep update
U _ZN20BVHConstructionState14updateGeometryERK6float3S2_
U _ZN20BVHConstructionState19updateGeometry_wobbER6float3S1_
I'm using the eclipse IDE to make a CUDA project and the generated linking instruction with the relevants object files in bold is:
nvcc -L/usr/lib/llvm-2.8/lib -L/home/viniciusdasilva/NVIDIA_GPU_Computing_SDK/C/lib -L/home/viniciusdasilva/NVIDIA_GPU_Computing_SDK/C/common/lib/linux -L"/home/viniciusdasilva/workspace/CyberX3D/Debug" -L"/home/viniciusdasilva/workspace/PQP_v1.3/lib" -o "continuous_collision_detection" ./src/Matrix.o ./src/bvh_kernels.o ./src/cpu_bvh_constru.o **./src/cuda_bvh_constru.o** **./src/cuda_bvhexports.o** ./src/cuda_collision.o ./src/cuda_make_grid.o ./src/cuda_rss_constru.o ./src/cuda_timer.o ./src/cudasort.o ./src/geometry.o ./src/importer_utility.o ./src/lbvh.o ./src/lbvh2.o ./src/linux_functions.o ./src/main.o ./src/plyfile.o ./src/plyfunctions.o ./src/radixsort.o ./src/scene.o ./src/transform.o -lPQP -lcutil_x86_64 -lcudpp_x86_64 -lCyberX3D -lpthread -lrt -lGLEW -lboost_thread -lboost_serialization -lboost_wserialization -lboost_filesystem -lboost_system -lglut -ldl -lm -lLLVMTransformUtils -lLLVMipa -lLLVMSystem -lLLVMMC -lLLVMCore -lLLVMSupport -lLLVMAnalysis -lLLVMTarget -lLLVMAsmParser -lLLVMX86Disassembler -lLLVMInstCombine -lLLVMX86AsmParser -lLLVMX86AsmPrinter -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Info -lLLVMJIT -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -locelot
我无法弄清楚为什么链接器没有发现这些符号,因为我认为这些对象被正确传递。是否有特定的顺序需要将这些对象放入?还是别的什么?
顺序必须是:
cuda_bvhexports.o cuda_bvh_constru.o
为什么库的链接顺序有时会导致 GCC 中的错误?
如果将 cuda_bvhexports.o 放在 cuda_bvh_constru.o 前面不起作用,您可以尝试将所有对象文件放在静态库中,然后将其传递给链接器。
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用