darknet yolo make报错,缺少instance-segmenter.o的规则

news/2024/7/11 0:43:25 标签: YOLO, darknet, C++, Makefile

文章目录

  • darknet yolo make报错,缺少instance-segmenter.o的规则
    • 报错原因
    • 解决办法
    • 新问题
      • 解决办法
    • 补充

darknet_yolo_makeinstancesegmentero_1">darknet yolo make报错,缺少instance-segmenter.o的规则

报错原因

Makefile没有识别到对于instance-segmenter.o的编译规则,但其实instance-segmenter.cpp是存在的
darknet/examples
加粗样式

解决办法

手动编译

  1. 手动编译生成输出文件instance-segmenter.o
g++ -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ -Wall -Wno-unused-result -Wno-unknown-pragmas -fPIC -fpermissive -Ofast -DGPU -c ./examples/instance_segmenter.cpp -o obj/instance_segmenter.o

生成成功
在这里插入图片描述

  1. 修改Makefile,跳过自动化流程
    由于Makefile仍执着于自动化生成instance-segmenter.o,实际上其已经手动生成,所以修改Makefile
    在这里插入图片描述
    找到上图这一行,删除instance-segmenter.o
    继续make即可

新问题

由于删除了instance-segmenter.o,导致最终darknet生成会缺少一个依赖

报错信息

g++ -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ -Wall -Wno-unused-result -Wno-unknown-pragmas -fPIC -fpermissive -Ofast -DGPU obj/captcha.o obj/lsd.o obj/super.o obj/art.o obj/tag.o obj/cifar.o obj/go.o obj/rnn.o obj/segmenter.o obj/regressor.o obj/classifier.o obj/coco.o obj/yolo.o obj/detector.o obj/nightmare.o obj/darknet.o libdarknet.a -o darknet -lm -pthread  -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand -lstdc++  libdarknet.a
/usr/bin/ld: obj/darknet.o: in function `main':
darknet.cpp:(.text.startup+0x3af): undefined reference to `run_isegmenter(int, char**)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:75:darknet] 错误 1

解决办法

手动编译最后一步

g++ -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ -Wall -Wno-unused-result -Wno-unknown-pragmas -fPIC -fpermissive -Ofast -DGPU obj/captcha.o obj/lsd.o obj/super.o obj/art.o obj/tag.o obj/cifar.o obj/go.o obj/rnn.o obj/segmenter.o obj/regressor.o obj/classifier.o obj/coco.o obj/yolo.o obj/detector.o obj/nightmare.o obj/instance_segmenter.o obj/darknet.o libdarknet.a -o darknet -lm -pthread  -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand -lstdc++  libdarknet.a

在这里插入图片描述
生成成功在这里插入图片描述

补充

g++编译选项

g++ 是 GNU Compiler Collection 中用于编译 C++ 代码的工具。您可以使用不同的编译选项来控制编译的行为。以下是一些常见的 g++ 编译选项:

-o <output_file>:指定输出文件的名称。
-Wall:启用常见的警告信息。
-Werror:将警告视为错误,导致编译失败。
-std=:指定所使用的 C++ 标准(例如:-std=c++11、-std=c++14、-std=c++17 等)。
-I <include_path>:添加包含文件的搜索路径。
-L <library_path>:添加库文件的搜索路径。
-l:链接特定的库。
-g:生成用于调试的调试信息。
-O:优化级别,其中 可以是 0、1、2、3 或 s。
-pthread:在编译时链接 POSIX 线程库。
-f:启用或禁用特定的编译特性,如 -finline-functions。
以下是一个示例编译命令,使用了一些常见的选项:

g++ -o my_program my_program.cpp -std=c++11 -Wall -Werror -I /path/to/include -L /path/to/libs -lmylib -g -O2 -pthread

在此命令中,my_program.cpp 是您要编译的源文件,-o my_program 指定输出文件名为 my_program,-std=c++11 指定使用 C++11 标准,-Wall -Werror 启用警告并将其视为错误,-I /path/to/include 添加包含文件搜索路径,-L /path/to/libs 添加库文件搜索路径,-lmylib 链接名为 mylib 的库,-g 生成调试信息,-O2 启用优化级别 2,-pthread 链接 POSIX 线程库。

Makefile_59">Makefile编译规则

Makefile 是一种用于管理源代码和构建过程的文件。它描述了源代码文件之间的依赖关系以及如何编译和构建项目。一个典型的 Makefile 包含了编译规则、依赖关系以及构建命令。

# 定义编译器和编译选项
CXX = g++
CXXFLAGS = -std=c++11 -Wall

# 定义目标文件和依赖关系
TARGET = my_program
SRCS = main.cpp foo.cpp bar.cpp
OBJS = $(SRCS:.cpp=.o)

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $(OBJS)

# 生成目标文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理生成的文件
clean:
	rm -f $(OBJS) $(TARGET)

在这个示例中,Makefile 包含以下几个部分:

定义了编译器 CXX 和编译选项 CXXFLAGS。
定义了目标文件名 TARGET,源文件列表 SRCS,以及目标文件列表 OBJS。
all 是默认目标,它依赖于 $(TARGET)。
$(TARGET) 目标依赖于目标文件列表 $(OBJS),并且生成可执行文件。
使用模式规则生成目标文件,例如将 .cpp 文件编译成 .o 目标文件。
clean 目标用于删除生成的目标文件和可执行文件。


http://www.niftyadmin.cn/n/4972160.html

相关文章

022-从零搭建微服务-短信服务(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

Windows 10【压缩卷】操作报错【无法将卷压缩到超出任何不可移动的文件所在的点】的解决方法

目录 一、背景 二、原因 三、解决方法 3.1 Windows自带的碎片清理工具 3.1.1 操作步骤 3.1.2 操作结果 3.2 MyDefrag工具清理磁盘碎片 3.2.1 操作步骤 3.2.2 操作结果 3.3 Windows自带的事件查看器 3.3.1 操作步骤 3.3.2 操作结果 3.4 关闭虚拟内存并删除虚拟内存…

PostgreSQL SQL优化

PostgreSQL SQL优化 一、在字段里面写的子查询放到from后面&#xff0c;用left join&#xff0c;会大幅提高SQL查询速度。 一、在字段里面写的子查询放到from后面&#xff0c;用left join&#xff0c;会大幅提高SQL查询速度。

msvcp110.dll丢失的解决方法,大家最常用的三个解决方法【教程】

win10是一款非常优秀的电脑系统&#xff0c;但有时候也会出现文件错误&#xff0c;比如msvcp110.dll丢失。这个问题可能会导致一些应用程序无法正常运行&#xff0c;甚至可能影响到系统的稳定性。那么&#xff0c;面对这样一个问题&#xff0c;我们应该如何解决呢&#xff1f;今…

Pushmall 推熵共享电商平台 - 共享链盟

Pushmall 推熵共享电商平台 - 共享链盟以 Pushmall 推熵 B2B/B2C 批零采销订货商城系统为基础&#xff0c;以‘平台自营、供应商入驻、商家自营 商圈链盟 共享会员制&#xff0c;实现 S2B2B2C 商业模式’&#xff0c;是一款为实体商家服务的电商营销推广平台。以 “共创、共生…

Pygame编程(5)key模块

Pygame编程&#xff08;5&#xff09;key模块 函数示例 函数 pygame.key.get_focused True:如果显示器正在接收来自系统的键盘输入pygame.key.get_pressed 获取所有键盘按钮的状态pygame.key.get_mods 确定持有哪些修饰符键pygame.key.set_mods 临时设置按下哪些修饰键pygame.…

RT-Thread 线程间同步

多个执行单元&#xff08;线程、中断&#xff09;同时执行临界区&#xff0c;操作临界资源&#xff0c;会导致竟态产生。 RTT使用信号量、互斥量、事件集来解决这种问题。 同步&#xff08;按顺序&#xff09;、互斥&#xff08;排它&#xff09;。 信号量 信号量是一种轻型…

EWM是什么

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…