2026/1/16 23:41:29
网站建设
项目流程
菜鸟式网站建设图书,湖南吧,php wordpress 钓鱼,网站建设软文最近用C写程序#xff0c;同时调用了OpenCV和LibTorch两个库#xff0c;编译时一直报错 undefined reference to imread#xff0c;怎么调参数都不行。之前单独用OpenCV都好好的#xff0c;差点怀疑人生#xff08;先说好#xff0c;我C水平仅限于用现成的库#xff0c;…最近用C写程序同时调用了OpenCV和LibTorch两个库编译时一直报错undefined reference to imread怎么调参数都不行。之前单独用OpenCV都好好的差点怀疑人生先说好我C水平仅限于用现成的库别喷我。后来在大模型的帮助下把问题定位到了ABI兼容性上。换了个OpenCV版本问题瞬间解决。简单说说原因1. 什么是ABI可以把它理解为C的“方言”。不同编译器版本、不同编译设置下同一个C函数比如std::string在二进制层面的实现和命名规则可能不同这就是不同的ABI。2. 为什么会报错C函数在编译后会被“重整”成一个特殊的内部名称。如果OpenCV是用“方言A”编译的而你的程序或LibTorch是用“方言B”去链接它两边对同一个函数如imread生成的内部名称就对不上链接器自然就找不到定义了。3. 问题的关键LibTorch新版本默认使用一种叫_GLIBCXX_USE_CXX11_ABI1新ABI的“方言”编译。如果你的OpenCV是用旧编译器或默认设置旧ABI编译的两者“方言”不通一起链接就会报错。