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

优化网站建设seo大连企业黄页电话

优化网站建设seo,大连企业黄页电话,网站打包成app软件,一起做网站欧洲站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/23821/

相关文章:

  • 公司招聘网站泉州网页
  • 太原网站建设的公司排名七牛 wordpress 图床
  • 合肥 网站设计苏州网站建设多少钱
  • 网站建设山东聚搜网络y网站建设公司哪家好 皆来磐石网络
  • 群晖wordpress站点地址网页和网站有什么分别
  • 开网站怎么赚钱如何建论坛网站
  • 天猫秘券网站怎么做大型网站开发技术
  • 潍坊市企业型网站建设设计公司调研报告
  • 怎么做免费视频网站吗沈阳高端网站建设公司
  • 策划公司网站销售渠道建设网站
  • 钦州做网站的公司南京网站建设希丁哥
  • 怎样做营销型网站推广手机网站切图
  • 网站建设公司与维护机械设备企业网站源码
  • 为什么输入网址打开的却是别的网站丢盖网logo设计免费
  • 网站地图怎样做建材网站建设案例
  • 广州网站建设解决方案焦作网站建设服务
  • 做网站做买网站做设计参考属于什么费用
  • 马鞍山做网站毕业设计代做淘宝好还是网站好
  • 网页设计门户网站江苏省建设信息网
  • 网站建设 定制南京 推广 网站建设
  • 常州做网站要多少钱建设网页制作
  • 学校免费网站建设如何申请个人网站域名
  • 影视网站seo描述网站建设的对比分析
  • 怎么做网站搜索做网站的大型公司
  • 成都网站搭建公司福建建设厅安全员报名网站
  • 定制化网站开发报价做网站网站代理怎么找客源
  • 网站建设 广州网站建设专业公司班级优化大师网页版
  • 萌宝宝投票网站怎么做室内设计培训学费多少
  • 郑州网站seo优网站推广的好处
  • wordpress是英文的怎么办红河州seo怎么做整站排名