当前位置: 首页 > news >正文

青浦区网站建设百度快照功能

青浦区网站建设,百度快照功能,小程序制作开发平台,湖州外贸网站建设1 问题背景说明 在自己的项目源码中引用libeasysqlite.so时编译成功,但运行时遇到问题直接报错,找不到符号 symbol:_ZN3sql5FieldC1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_10field_typeEi。 2 问题描述和解…

1 问题背景说明

在自己的项目源码中引用libeasysqlite.so时编译成功,但运行时遇到问题直接报错,找不到符号 symbol:_ZN3sql5FieldC1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_10field_typeEi。

2 问题描述和解读

使用c++filt查看符号表中未知的这个符号

$c++filt _ZN3sql5FieldC1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_10field_typeEisql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)

查询到该符号对应的真实函数为:

sql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)

接下来在使用nm命令查询libeasysqlite.so,看是否有该符号对应的函数。使用nm命令查看,如下所示:

.../data/sqlite/build$ nm -gC libeasysqlite.so  |grep sql::Field::Field
000000000002fca0 T sql::Field::Field(sql::field_use)
000000000002fd80 T sql::Field::Field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sql::field_type, int)
0000000000038394 W sql::Field::Field(sql::Field&&)
00000000000320c4 W sql::Field::Field(sql::Field const&)
000000000002fca0 T sql::Field::Field(sql::field_use)
000000000002fd80 T sql::Field::Field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sql::field_type, int)
0000000000038394 W sql::Field::Field(sql::Field&&)
00000000000320c4 W sql::Field::Field(sql::Field const&)

这里发现并没有我们需要的sql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)方法,而是有一个类似的sql::Field::Field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, sql::field_type, int)方法,这就说明有可能是编译时使用的链接库不同而导致的问题。

这里是cxx11空间,对应的是 C++11版本的链接库,而我们需要的是__1空间的库,也就是C++03版本的链接库。那么如何修改呢?就是在CMakeList.txt文件中添加一些参数,如下所示:

set(CMAKE_CXX_COMPILER clang++-14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")

重新编译libeasysqlite.so库。这样在编译生成库的时候就会强制使用C++03版本的标准了,再次make编译出sql库即可。

接下来开始测试该库。修改后执行nm命令查看,如下所示:

.../data/sqlite/build$ nm -gC libeasysqlite.so  |grep sql::Field::Field
00000000000244b0 T sql::Field::Field(sql::field_use)
0000000000024590 T sql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)
00000000000244b0 T sql::Field::Field(sql::field_use)
0000000000024590 T sql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)
0000000000029e54 W sql::Field::Field(sql::Field&&)
000000000002734c W sql::Field::Field(sql::Field const&)

这样就和我们需要的对上了。

3 问题总结

该类问题的解决步骤如下所示:

  1. 遇到这类问题时基本上都是使用c++filt来将符号表中的符号转换。
  2. 确认符号是否在库中,如果不在库中那么可能是链接库的版本或者编译方式不对。
  3. 修正编译方式/库的版本,确认符号表中的符号可以对上。接下来进行实测即可。

http://www.khdw.cn/news/62542.html

相关文章:

  • 泉州手机模板建站结构优化是什么意思
  • 企业文化简介网站怎么做东莞企业网站设计公司
  • 储物柜厂家直销器厂家做网站引流推广犯法吗
  • 高端网站建设公司哪里济南兴田德润实惠吗最经典的营销案例
  • 独立站是什么意思百度搜索首页
  • 公司品牌网站建设域名批量查询系统
  • 电子商务网站建设前期百度竞价点击价格
  • 安卓做网站南宁百度seo公司
  • 视频网站亏损也做百度推广助手怎么用
  • 政府 网站 管理系统官网百度
  • 网站被host重定向抖音seo推广外包公司好做吗
  • 芜湖移动网站建设百度收录批量提交入口
  • 网站关键词优化多少钱品牌营销与推广
  • wordpress的字体seo怎么赚钱
  • 可以访问任何网站的浏览器百度ai人工智能平台
  • 珠海企业建站高端网站定制
  • 宁波网络营销网站建设网游推广员
  • 做按摩网站有生意吗seo优化需要做什么
  • 网站管理权限怎么进去搜索引擎排名优化seo课后题
  • 佛山有哪几个区苏州优化收费
  • 重庆蒲公英网站建设公司大数据分析师
  • 为什么网站打不开首页网络营销服务平台
  • 公司的八个主要部门seo排名优化课程
  • 湖北联诺建设网站常宁seo外包
  • 备案的博客网站可以做别的吗百度品牌广告收费标准
  • 网站开发需要几个人云搜索app下载
  • 东莞公司品牌网站建设南京网站建设
  • 微信网站怎么收款广东疫情最新数据
  • 目前做的比较好的情趣用品网站贵阳网站建设推广
  • 商务网站开发需求分析磁力引擎