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

大连网站优化公司徐州百度推广公司

大连网站优化公司,徐州百度推广公司,网站建设平台排行榜,公司seo是什么意思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.tj-hxxt.cn/news/44929.html

相关文章:

  • wordpress改织梦南昌seo教程
  • 英文网站首页优化网络推广员的日常工作
  • 响应式全屏网站广告平台网站有哪些
  • 长春网站排名提升seo入门免费教程
  • 查询网站的外链营销网站定制公司
  • 购物网站开发的描述seo发包技术教程
  • 网站关键字排名连云港百度推广总代理
  • 商城网站建设公司汕头seo不错
  • 海外网站服务器下载北京关键词优化平台
  • 桂林网站制作推荐线上营销推广方案有哪些
  • 吴江网站建设哪家好百度一下首页百度一下
  • 网站用户黏度表现在明星百度指数排名
  • 兰州网站设计制作广州网页制作
  • 商务网站建设公昆明网络推广
  • 福田网站建设深圳信科时事新闻
  • 智慧团建团员登录入口站长工具seo查询软件
  • 上海网站建设的企百度广告联盟网站
  • wordpress网站工具栏进入百度一下官网
  • 郑州教育培训机构网站建设鸡西seo
  • 郑州网站建设方案书成品网站源码1688免费推荐
  • 教务管理网站开发西安百度网站快速排名
  • 固定ip做网站和域名区别企业网站推广方法
  • axure做交易网站什么推广平台比较好
  • 网站手机端 怎么做网络营销课程总结1500字
  • 专门做折扣的网站有哪些百度竞价排名的利与弊
  • 网站撤销备案免费b站推广网站下载
  • 提供网站建设排行榜怎么做自己的网站
  • 大连网站开发多少钱电商运营公司
  • 网站架构教程给公司建网站需要多少钱
  • 广东营销式网站广州推广优化