undefined symbol 问题解决记录

2023-05-16

历经一个月,昨日完成打印机network部分的编写(c语言),编写makefile构建动态库。构建完成后遂进行调用测试,出现:

./network: symbol lookup error: /usr/lib64/netPrnctl.so: undefined symbol: cupsGetDests

将解决方法与过程记录,以便日后查阅。

查找与分析原因

在编译时未出现问题,没有报错,成功编译生成动态库。以下为编译的makefile文件。

###########################################################
#	File:	netPrnctl.so Makefile
#	Author: Neko
###########################################################

CC = gcc
CFLAGS = -Wall -g -fPIC

INCLUDE = -I./inc -I../ -I../cups -I../backend -I/usr/include/libusb-1.0
TARGET = netPrnctl.so

vpath % .h ./inc

OBJS	= public.o prnctlAvision.o prnctlNetwork.o prnctl.o
SRCS	= ./src/public.c ./src/prnctlAvision.c ./src/prnctlNetwork.c ./src/prnctl.c

$(OBJS):$(SRCS)
	$(CC) $(CFLAGS) $(INCLUDE) -c $^

all:$(OBJS)
	$(CC) -shared -fPIC -o $(TARGET) $(OBJS) -pthread
	cp $(TARGET) /usr/bin
	cp $(TARGET) /usr/lib64

clean:
	rm -f *.o
	rm -f netPrnctl.so

虽成功生成了动态库,但是在调用时却出现找不到符号的问题,于是使用 ldd -r 查看

neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ldd -r /usr/lib64/netPrnctl.so
	linux-vdso.so.1 (0x00007ffeef44c000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9607add000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f96076ec000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f9607f0f000)
undefined symbol: libusb_open	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsArrayNew	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsDirOpen	(/usr/lib64/netPrnctl.so)
undefined symbol: ppdFindAttr	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsParseOptions	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsGetPPD	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_set_interface_alt_setting	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_release_interface	(/usr/lib64/netPrnctl.so)
undefined symbol: ppdClose	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsGetOption	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_detach_kernel_driver	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_close	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsFreeOptions	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsDirClose	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_get_string_descriptor_ascii	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_free_config_descriptor	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_get_config_descriptor	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsBackChannelWrite	(/usr/lib64/netPrnctl.so)
undefined symbol: _cupsGet1284Values	(/usr/lib64/netPrnctl.so)
undefined symbol: _ppdNormalizeMakeAndModel	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_attach_kernel_driver	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_get_device_list	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_kernel_driver_active	(/usr/lib64/netPrnctl.so)
undefined symbol: _cups_strcasecmp	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_bulk_transfer	(/usr/lib64/netPrnctl.so)
undefined symbol: _cupsLangPrintFilter	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsSideChannelRead	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsArrayCount	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsFileClose	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsDirRead	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_set_configuration	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsFreeDests	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_open_device_with_vid_pid	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_reset_device	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_exit	(/usr/lib64/netPrnctl.so)
undefined symbol: ppdOpenFile	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_init	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_get_device_descriptor	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsBackendReport	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_free_device_list	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_claim_interface	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsFileOpen	(/usr/lib64/netPrnctl.so)
undefined symbol: libusb_control_transfer	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsFileGets	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsArrayAdd	(/usr/lib64/netPrnctl.so)
undefined symbol: backendGetMakeModel	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsArrayFind	(/usr/lib64/netPrnctl.so)
undefined symbol: _cups_strlcpy	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsGetDests	(/usr/lib64/netPrnctl.so)
undefined symbol: cupsSideChannelWrite	(/usr/lib64/netPrnctl.so)
undefined symbol: httpAssembleURIf	(/usr/lib64/netPrnctl.so)

发现动态库没有链接libusb 与 libcups 两个库,所以netPrnctl.so用到的这两个的函数都没有符号。
虽然构建netPrnctl.so的c文件已包含libusb与cups函数的头文件,编译器做的工作仅是将源文件中以“文本形式”存在的源代码翻译成机器语言(二进制)的形式,并生成目标文件(源代码全部变成"二进制"的形式),在此期间对源代码中的语法进行检查,有语法错误则报错,程序无法通过编译。故编译没有错误仅是说明没有语法上的问题。在实际调用时也可能出现其他情况。
通过上面的makefile看到,编译生成了
OBJS = public.o prnctlAvision.o prnctlNetwork.o prnctl.o
这4个目标文件。
而当链接器进行链接的时候,会先把各个目标文件在可执行文件(ELF文件的一种,共享库也是属于其中)里面的位置确定下来,然后经过一系列处理,直到把所有目标文件的内容都写在可执行文件中对应的位置上,再经过一些工作,就会生成一个可执行程序。
由此判断,netPrnctl.so依赖的libusb 与 libcups 两个库没有链接上。

解决办法

既然是因为没有链接libusb 与 libcups,那么将这两个库链接上是不是就能解决问题?
首先查看这两个库的路径。一般gcc里会有。

neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ls /usr/lib/x86_64-linux-gnu/ | grep libcups
libcupscgi.so.1
libcupsfilters.so.1
libcupsfilters.so.1.0.0
libcupsimage.so.2
libcupsmime.so.1
libcupsppdc.so.1
libcups.so.2
neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ls /usr/lib/x86_64-linux-gnu/ | grep libusb
libusb-1.0.a
libusb-1.0.so
libusbmuxd.so.4
libusbmuxd.so.4.0.0

于是将makefile进行调整,添加链接libusb 与 libcups的语句。

###########################################################
#	File:	netPrnctl.so Makefile
#	Author: Neko
###########################################################

CC = gcc
CFLAGS = -Wall -g -fPIC

INCLUDE = -I./inc -I../ -I../cups -I../backend -I/usr/include/libusb-1.0
TARGET = netPrnctl.so
LIBVAR = -lusb-1.0 -lcups
LIBPATH = -L/usr/lib64/x86_64-linux-gnu

vpath % .h ./inc

OBJS	= public.o prnctlAvision.o prnctlNetwork.o prnctl.o
SRCS	= ./src/public.c ./src/prnctlAvision.c ./src/prnctlNetwork.c ./src/prnctl.c

$(OBJS):$(SRCS)
	$(CC) $(CFLAGS) $(INCLUDE) -c $^

all:$(OBJS)
	$(CC) -shared -fPIC -o $(TARGET) $(OBJS) $(LIBPATH) $(LIBVAR) -pthread
	cp $(TARGET) /usr/bin
	cp $(TARGET) /usr/lib64

clean:
	rm -f *.o
	rm -f netPrnctl.so

编译时却报错

/usr/bin/ld: 找不到 -lcups

这里说一下:
出现 /usr/bin/ld: cannot find(找不到) -lxxx
xxx表示函式库文件名称,如:libc.so、libltdl.so、libXtst.so。

命名规则是:lib+库名(即xxx)+.so。

会发生这样的原因有以下三种情形:

1 系统没有安装相对应的lib

2 相对应的lib版本不对

3 lib(.so档)的symbolic link不正确,没有连结到正确的函式库文件(.so)

而libcups.so.2不符合命名规则。故报错找不到。
解决办法:
到libcups所在路径下,链接新的符合规则的libcups.so

neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ cd  /usr/lib/x86_64-linux-gnu
neko@neko:/usr/lib/x86_64-linux-gnu$ sudo ln -s libcups.so.2 libcups.so
neko@neko:/usr/lib/x86_64-linux-gnu$ cd -
/home/neko/ZCPrinterDevice/NetworkSetupTool/filter
neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ls /usr/lib/x86_64-linux-gnu/ | grep libcups
libcupscgi.so.1
libcupsfilters.so.1
libcupsfilters.so.1.0.0
libcupsimage.so.2
libcupsmime.so.1
libcupsppdc.so.1
libcups.so
libcups.so.2

重新编译成功,没有报错。再次调用测试,也没有出现找不到符号的问题。

neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ldd -r /usr/lib64/netPrnctl.so
	linux-vdso.so.1 (0x00007fff43f66000)
	libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f4087f39000)
	libcups.so.2 => /usr/lib/x86_64-linux-gnu/libcups.so.2 (0x00007f4087cad000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4087a8e000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f408769d000)
	libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f408747f000)
	libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f4087234000)
	libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f4086ecf000)
	libavahi-common.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-common.so.3 (0x00007f4086cc3000)
	libavahi-client.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-client.so.3 (0x00007f4086ab2000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4086895000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f40864f7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4088364000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f40862ef000)
	libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f4086019000)
	libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f4085de7000)
	libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f4085be3000)
	libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f40859d8000)
	libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f40856a9000)
	libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f408548c000)
	libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f408510e000)
	libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f4084efb000)
	libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f4084cc5000)
	libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f4084a91000)
	libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f4084810000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f40845c3000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f40843bf000)
	libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f40841bb000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f4083fa0000)
	libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f4083d98000)
	libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f4083b14000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f40838ee000)
	liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f40836d2000)
	libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f40833b7000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f40831a2000)

可以看到,依赖的库基本都链接上了。

结语

所有错误都有原因,有迹可循。遇到问题不要急躁,静心思考,理出种种可能导致问题的原因,再排除,找到根源去解决。搜索引擎和书籍是很好的工具,凡事先尽量自己想办法,独立解决问题也是一种能力。
参加工作半年,此时的我也只是一个刚进门的初级工程师。这些话是对我自己的告诫,也是对与我一样在门内探索的同学的建议,希望有所帮助。共勉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

undefined symbol 问题解决记录 的相关文章

  • 有没有办法处理 JavaScript 中调用的未定义函数?

    如果我有一个像下面这样的函数 function catchUndefinedFunctionCall name arguments alert name is not defined 我做了一些愚蠢的事情 比如 foo bar 当 foo
  • 打字稿运行时错误:无法读取未定义(枚举)的属性

    我在文件中有以下接口和枚举RESTConfig ts export const enum RESTMethod POST POST GET GET export interface RESTConfig url string method
  • 如何从主脚本将导入的模块块传输到表面上?

    在我的主文件中 我有一个名为win 我像这样导入一个模块from draw import def draw image x y win blit image x y 这是一个来自draw 它不起作用 因为win没有定义 如何定义它 将目标表
  • Haskell 中“undefined”的类型签名意味着什么?

    我是 Haskell 的初学者 我对undefined函数的类型签名 我期望有更简单的东西 但我在 Hackage 上发现了这个 undefined forall r RuntimeRep forall a TYPE r HasCallSt
  • 使用严格会导致未定义的函数

    我正在尝试组织我的 js 文件并遵循建议的模块模式 当我在此模式中使用 use strict 时 函数被声明为未定义 如果没有 use strict 方法 该函数就可以正常工作 是否建议使用严格模式 如果是 为什么该功能在使用它时不起作用
  • Javascript - 从对象中删除未定义的字段[重复]

    这个问题在这里已经有答案了 有没有一种干净的方法可以从对象中删除未定义的字段 i e gt var obj a 1 b undefined c 3 gt removeUndefined obj a 1 c 3 我遇到了两种解决方案 each
  • Python错误:NameError:名称未定义[重复]

    这个问题在这里已经有答案了 import numpy as np from scipy import optimize as opt import time def grad d weight 0 0 learnrate 0 01 tol
  • nil:NilClass 的未定义方法“map”

    当用户尝试更新其个人资料时 我的应用程序似乎随机抛出 nil NilClass 的未定义方法 map 错误 但奇怪的是 它说更新时发生错误 但错误行实际上在视图中 完整错误 users update ActionView TemplateE
  • JavaScript“未定义”与“void 0”

    到底有什么区别undefined and void 0 哪个是首选 为什么 不同之处在于 某些浏览器允许您覆盖undefined 然而 void anything总是返回真实值不明确的 function undefined undefine
  • 未捕获的类型错误:无法调用未定义的方法“toLowerCase”

    我在进行一些简单的 jQuery DOM 操作时遇到了一个非常模糊的错误 触发错误的行如下 this closest tr remove 如标题所述 错误是 未捕获的类型错误 无法调用未定义的方法 toLowerCase 在文件中 jque
  • 我应该声明并检查 PHP 中是否存在变量吗?

    我注意到 XAMPP 上启用了严格的错误报告 并且现在出现未定义的索引错误 我只有两个小问题 我还在学习 我知道你不知道have在 PHP 中声明变量 但是声明它们有什么好处吗 如果不是 为什么在我未定义错误的情况下启用严格错误报告时会出现
  • this 在箭头函数内未定义

    我试图在我的箭头函数中访问它 import myObject from myObjectPath export const myClass Fluxxor createStore initialize this list this id n
  • 解析具有未定义值的 JSON?

    可能的重复 解析或修复具有特殊 未定义 值的 JSON https stackoverflow com questions 59304404 parsing or fixing jsons with special undefined va
  • 仅当值既不为 null 也不未定义时才调用函数

    单击按钮时 我检查本地存储键中是否存在某些内容 如下所示 var a localStorage getItem foo if typeof a undefined Function 但如果该键根本不存在 则返回 null 我怎样才能打电话如
  • 如何区分未传递的参数和传递错误值的参数?

    我试图找出在 Perl 中区分未传递参数和参数已作为 0 传递的情况的最佳方法 因为它们对我来说意味着不同的事情 通常我喜欢这种歧义 但在本例中我生成 SQL 因此我想用 NULL 替换未定义的参数 但将 0 保留为 0 所以这就是歧义 s
  • 动态 getter 和 setter - 一种可能性

    我正在尝试解决最近出现的一个问题 假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter 就像 php 中的那样 get set 但由于 javascript 没有包罗万象的属性 我们唯一能做的就是提供
  • XCode 4.3.2 SDLMain.o 中的 SDL 未定义符号

    我已经开始尝试在 Xcode 4 3 2 中使用 SDL 因此我启动了 Mac OS X 的 Cocoa 应用程序并连接了我的所有框架 OpenGL SDL 等 我没有 SDL Image SDL Mixer 等 我需要这些吗 当我尝试编译
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • 未定义的变量(opencart)

    在错误明显的行上 代码如下所示 我知道这可能是一个模糊的问题 但如果有人可以提供帮助 那就太好了 这是一个非常模糊的问题 您很可能会在 header tpl 中收到此错误 因为您正在使用为 1 5 4 x 或更早版本 和 1 5 5 x 制
  • 如何在 JavaScript 中检查未定义或 null 变量?

    我们经常在 JavaScript 代码中使用以下代码模式 if typeof some variable undefined some variable null Do something with some variable 是否有一种不

随机推荐

  • 正则表达式匹配开头和结尾(^、$、[^指定字符])

    1 匹配开头和结尾 代码功能 匹配字符串开头 匹配字符串结尾 示例1 xff1a 需求 xff1a 匹配以数字开头的数据 import re 匹配以数字开头的数据 match obj 61 re match 34 d 34 34 1hell
  • re.sub()用法详解

    源代码 参数及其意义 xff1a def sub pattern repl string count 61 0 flags 61 0 34 34 34 Return the string obtained by replacing the
  • BERT模型的详细介绍

    1 BERT 的基本原理是什么 xff1f BERT 来自 Google 的论文Pre training of Deep Bidirectional Transformers for Language Understanding xff0c
  • 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理 NLP 之使用TF IDF模型计算文本相似度 所用数据集 xff1a ChnSentiCorp htl all csv 语料库即存放稀疏向量的列表 要注意的是 xff0c 搜索文本text与被检索的文档共用一个特征词词典 NL
  • C++中关于类重复定义的分析和解决方法

    在C 43 43 中将类以及类中的成员函数的声明放在 h的头文件中 xff0c 而将类中成员函数的定义 xff08 即实现代码 xff09 放在 cpp的源文件中 xff0c 这样我们的程序设计起来更加的模块化 xff0c 但是 xff0c
  • re.search()用法详解

    re search xff1a 匹配整个字符串 xff0c 并返回第一个成功的匹配 如果匹配失败 xff0c 则返回None pattern 匹配的规则 string 要匹配的内容 flags 标志位 这个是可选的 就是可以不写 可以写 比
  • re.findall()用法详解

    re findall xff1a 函数返回包含所有匹配项的列表 返回string中所有与pattern相匹配的全部字串 xff0c 返回形式为数组 示例代码1 xff1a 打印所有的匹配项 import re s 61 34 Long li
  • Linux系统中创建虚拟环境详解

    1 方法一 1 1 安装虚拟环境的命令 xff1a sudo pip install virtualenv sudo pip install virtualenvwrapper 1 2 安装完虚拟环境后 xff0c 如果提示找不到mkvir
  • 使用python将图片改为灰度图或黑白图

    使用python将图片改为灰度图或黑白图有三种方式 xff0c 分别是是使用cv2库和PIL库来实现 xff0c 详细过程如下所示 1 使用cv2库将图片改为灰度图 在使用cv2进行读取原彩色图片时 xff0c 在里面添加一个参数cv2 I
  • 虚拟机中windows镜像下载与安装

    镜像文件下载 xff1a 链接 xff1a https pan baidu com s 1VKWMHHCGRwWXk2GpxyUp0A 提取码 xff1a shlg 注意 xff1a 虚拟机中的镜像和本地电脑系统安装的镜像是一样的 安装教程
  • mongo数据库中字符串型正负数值比较大小

    数据库中数据展示 xff1a 使用python代码实现 xff1a Requires pymongo 3 6 0 43 from pymongo import MongoClient client 61 MongoClient 34 mon
  • flask项目中内部接口调用其他内部接口操作

    1 requests 在 Flask 框架项目中 xff0c 可以通过使用 requests 模块来进行内部接口调用 requests 模块是 Python 中常用的 HTTP 请求库 xff0c 可以用于发送 HTTP 请求和处理响应 示
  • ElasticSearch删除索引中的数据(delete_by_query)

    1 删除两个月以前的数据 在 Elasticsearch 中 xff0c 要删除两个月以前的数据 xff0c 可以通过以下步骤 xff1a 计算当前时间的两个月前的日期 xff0c 可以使用 Python 的 datetime 模块来实现
  • Qt Creator子图绘制

    Qt中在一个窗体文件内画所有图显然是不好维护的 xff0c 我们可以将主窗体拆分为几个子窗体 xff0c 在子窗体中绘制子图 xff0c 这样便于我们去维护我们的代码 1 在工程文件中右键 gt Add New 2 选择Qt 设计师界面 3
  • MessageFilter [target=odom ]: Dropped 100.00% of messages so far.问题解决

    错误提示 WARN 1580994954 426403779 MessageFilter target 61 odom Dropped 100 00 of messages so far Please turn the ros gmappi
  • 电磁循迹智能车基于stm32cubeMX、HAL库—我的第一辆智能车

    我的第一辆智能车 电磁循迹智能车 提示 本文适用于初学 想完成一个基础四轮车练练手者 大佬还请勿喷 不过欢迎提出意见 有纰漏之处我将及时纠正 注 工程代码链接已贴在文末 前言 所用到的硬件平台 stm32f103c8t6 舵机 电机 L29
  • 2022年国赛建模B题思路与程序

    B题 无人机遂行编队飞行中的纯方位无源定位 关键词搜索 xff1a 无人机 xff0c 无源定位 其实这个工作特别多 xff0c 知网一堆 xff0c 如果选这个题一定要想好做的出彩 xff0c 另外网上的场景和本题不是很一样 xff0c
  • 2017全国大学生电子设计竞赛:室内可见光定位装置

  • 基于FreeRTOS下多任务的同时操作

    FreeRTOS移植及多任务的实现 前言 xff1a 一 FreeRTOS移植 xff08 1 xff09 移植准备工作 xff08 2 xff09 FreeRTOS移植到stm32中 xff08 3 xff09 例程验证 二 多任务实现
  • undefined symbol 问题解决记录

    历经一个月 xff0c 昨日完成打印机network部分的编写 c语言 xff0c 编写makefile构建动态库 构建完成后遂进行调用测试 xff0c 出现 xff1a network symbol lookup error usr li