扎个眼 | json 静态库 引用未定义 undefined reference to `Json::Value::operator=(Json::Value&&)‘

作者在使用CentOS7.9和GCC7.3环境中遇到json静态库问题,发现官方支持不足。通过更换nlohmann库并调整编译配置,解决了将JSON对象序列化为string的问题。开发者建议,对于官方库的困难问题,考虑替换库可能是有效的方法。

json 库 的问题是真的多啊
官方也没有很好的觉得方式
最好是换个包吧

扎个眼,后面再来记录

描述一下我的情况吧
centos 7.9 gcc 7.3
调用给的json静态库 0.7
链接静态库,后面一直卡在这里
可以确定的是,静态库是链接成功了,然后

在这里插入图片描述

在这里插入图片描述

把有问题的这一段给注释就没问题

奇葩问题 小本本记下来

在这里插入图片描述

更新
解决方式出来了
解决方式:出现这个问题,那我就用别的库
没错,就是 nlohmann 直接配一下头文件,定义一下
其 把json 序列化转化为string std::string json_str = json_obj.dump();
很方便啊
谁用谁知道
比json库好用很多 ,那还需要cmake 然后又make 最后链接了,编译还出乱子
话说官方的评论下面,开发者都没有这个解决方式 他就说和编译顺序有关
然后有个大佬说了解决方式 就是换库 被说拆台 哈哈哈哈!

正在执行任务: C/C++: gcc.exe 生成活动文件 正在启动生成... cmd /c chcp 65001>nul && "C:\Program Files\mingw64\bin\gcc.exe" -fdiagnostics-color=always -g D:\code\main.cpp -o D:\code\main.exe C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ADMINI~1\AppData\Local\Temp\ccq35lze.o: in function `main': D:\code/main.cpp:7: undefined reference to `std::istream::operator>>(int&)' C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\code/main.cpp:8: undefined reference to `std::ostream::operator<<(int)' C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\code/main.cpp:8: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))' C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ADMINI~1\AppData\Local\Temp\ccq35lze.o:main.cpp:(.rdata$.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_[.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_]+0x0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ADMINI~1\AppData\Local\Temp\ccq35lze.o:main.cpp:(.rdata$.refptr._ZSt4cout[.refptr._ZSt4cout]+0x0): undefined reference to `std::cout' C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ADMINI~1\AppData\Local\Temp\ccq35lze.o:main.cpp:(.rdata$.refptr._ZSt3cin[.refptr._ZSt3cin]+0x0): undefined reference to `std::cin' collect2.exe: error: ld returned 1 exit status 生成已完成,但出现错误。 * 终端进程已终止,退出代码: -1。 * 终端将被任务重用,按任意键关闭。
04-30
在使用 OpenCV 构建项目时,如果遇到链接错误 `undefined reference to cv::VideoCapture::operator>>(cv::Mat&)`,这通常表示编译器无法找到 `cv::VideoCapture` 相关的实现函数。此类问题通常与链接器未能正确链接 OpenCV 的视频处理库有关。 OpenCV 的 `VideoCapture` 类用于从文件或摄像头捕获视频流,其 `operator>>` 用于从视频流中读取帧。为了正确使用这些功能,必须确保在链接阶段将 `opencv_videoio` 库包含在编译命令中。具体来说,对于使用 `g++` 或 `clang++` 的项目,编译命令应包括 `-lopencv_videoio` 参数以链接该库。此外,还需确保 `opencv_core` 和 `opencv_imgproc` 库也被正确链接,因为这些库提供了 `VideoCapture` 类所依赖的基础功能 [^3]。 如果使用 CMake 构建项目,可以在 `CMakeLists.txt` 文件中添加以下内容以确保所有必要的 OpenCV 模块被链接: ```cmake find_package(OpenCV REQUIRED COMPONENTS core imgproc videoio) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(your_target_name ${OpenCV_LIBS}) ``` 上述配置确保了 `core`、`imgproc` 和 `videoio` 模块被正确包含和链接,从而避免因缺少这些模块而导致的未定义引用错误 [^3]。 此外,如果 OpenCV 是从源码编译安装的,需要确认在配置阶段启用了 `videoio` 模块。可以通过检查 `CMake` 配置中的 `WITH_V4L`、`WITH_FFMPEG` 等选项来确保视频输入输出功能被正确启用。对于某些特定平台(如嵌入式系统),可能还需要额外安装依赖库,例如 `libv4l-dev` 或 `ffmpeg` 开发包 [^2]。 最后,检查项目构建环境中的 OpenCV 安装是否完整,以及编译器和链接器是否能够找到正确的库文件。有时,系统中可能存在多个版本的 OpenCV,导致链接器选择了缺少某些功能的版本。在这种情况下,可以尝试指定库文件的完整路径,或调整环境变量如 `LD_LIBRARY_PATH` 和 `PKG_CONFIG_PATH` 来帮助链接器找到正确的库文件 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值