usr/bin/ld: CMakeFiles/yolov8.dir/yolov8_generated_process.cu.o:/media/lindsay/data/tensorrt_infer_engine/x86/yolov8-tensorrtx/tensorrt7/person/include/config.h:15: multiple definition of `OUTPUT_BLOB_NAME'; CMakeFiles/yolov8.dir/yolov8.cpp.o:/media/lindsay/data/tensorrt_infer_engine/x86/yolov8-tensorrtx/tensorrt7/person/include/config.h:15: first defined here /usr/bin/ld: CMakeFiles/yolov8.dir/yolov8_generated_process.cu.o:/media/lindsay/data/tensorrt_infer_engine/x86/yolov8-tensorrtx/tensorrt7/person/include/config.h:14: multiple definition of `INPUT_BLOB_NAME'; CMakeFiles/yolov8.dir/yolov8.cpp.o:/media/lindsay/data/tensorrt_infer_engine/x86/yolov8-tensorrtx/tensorrt7/person/include/config.h:14: first defined here
时间: 2023-07-24 22:13:50 浏览: 117
根据提供的错误信息,你的代码中存在重复定义的问题。编译器指出在 `yolov8_generated_process.cu.o` 和 `yolov8.cpp.o` 文件中都重复定义了 `OUTPUT_BLOB_NAME` 和 `INPUT_BLOB_NAME` 变量。
这种错误通常发生在多个源文件中都包含了同一个头文件,并且该头文件中定义了全局变量。由于每个源文件都会被编译成独立的目标文件,因此重复定义的全局变量会导致链接时出现冲突。
要解决这个问题,你可以考虑将这些全局变量的定义放在一个单独的源文件中,并在其他需要使用这些变量的源文件中使用 `extern` 关键字进行声明。这样可以确保全局变量只有一份定义,并且可以在多个源文件中共享。
首先,在一个源文件(比如 `config.cpp`)中定义这些全局变量:
```cpp
// config.cpp
#include "config.h"
const std::string INPUT_BLOB_NAME = "input_blob";
const std::string OUTPUT_BLOB_NAME = "output_blob";
```
然后,在其他源文件中使用 `extern` 关键字进行声明:
```cpp
// yolov8_generated_process.cu
#include "config.h"
extern const std::string INPUT_BLOB_NAME;
extern const std::string OUTPUT_BLOB_NAME;
// 其他代码
```
```cpp
// yolov8.cpp
#include "config.h"
extern const std::string INPUT_BLOB_NAME;
extern const std::string OUTPUT_BLOB_NAME;
// 其他代码
```
这样做可以确保全局变量只有一份定义,并且可以在多个源文件中共享使用。
请根据你的实际需求和代码结构,将全局变量的定义放在一个单独的源文件中,并在其他源文件中使用 `extern` 进行声明。如果问题仍然存在,请提供更多相关代码以便我们更好地帮助你解决问题。
阅读全文