当前位置: 首页 > 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.yayakq.cn/news/78219/

相关文章:

  • 网站建设saas佛山做优化的公司
  • 松阳建设网站网站建设书籍推荐
  • 普通网站要什么费用网站设计要求 优帮云
  • 关于小学网站建设的论文旅游网站建设的好处
  • 网站后台页面进不去网站代码用什么打开
  • 鲁东大学课程网站建设如何删除公司如何做网站宣传
  • 平湖手机网站建设山东建站管理系统
  • 网站建设行业报告鼎湖网站建设公司
  • 曲阜做网站哪家好佛山市seo网站设计工具
  • 学校网站 cms南京seo公司哪家
  • 成都网站优化步骤兰州网络推广技术
  • 做网站被骗五千多淘宝搜索热词排名
  • 中卫网站建站设计中信建设有限责任公司 陈晓佳
  • 智慧团建网站注册登录入口南宁网站建设醉懂网络
  • 石家庄网站优化推广app和网站的区别
  • 网站板块怎么做wordpress带会员中心主题
  • 网站建设及发布的流程图东莞网站推广模板
  • 深圳网站建设公司哪家最好wordpress网站安装
  • 网站建设前台与后台最新技术成都万商云集做网站怎么样
  • 网站文章内容一键排版功能企业网络推广价格
  • 四川住房和城乡建设厅网站三类人员怎样做免费网站推广
  • 查看邮箱注册了哪些网站最好最值得做的调查网站
  • 卡片式网站模板学风网站建设
  • 网站建设时间推进表模板花18000去达内培训值吗
  • 电商网站设计趋势帮一个企业做网站流程
  • 内江网站建设公司一般开车用什么导航最好
  • 网上那些彩票网站可以自己做吗上海高端网站公司
  • 贵州省住房和城乡建设厅网站宁波互联网企业排名
  • acfun网站设计改进互联网整合营销推广
  • 2核4g做网站wordpress 模块