当前位置: 首页 > 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/477341/

相关文章:

  • 深圳龙霸网站建设成都网站搭建公司
  • 400靓号手机网站建设应该如何做营销型网站
  • 怎么做钓鱼网站生成wordpress和django哪个好
  • 北京做网站建设比较好的公司中国做网站推广哪家好
  • 扬州建设局网站万网做网站多少钱
  • 展示性公司网站html成都网站制作汕头
  • 如果网站曾被挂木马国外seo教程
  • 网站建设的投资必要性产品设计方案模板范文
  • 长春网站建站wordpress 二维码 插件
  • iis网站出乱码网站建站公司有必要做吗
  • 贵阳网站建设哪家好方舟视频优化是什么意思
  • 十堰网站推广哪家专业科技有限公司英文
  • asp网站例子网站开发与设计
  • 网站开发提供源代码怎么快速建一个网站
  • 自助网站模板平台网站开发行业信息网
  • wordpress 在线文章插件营销型企业网站优化
  • wordpress菜单选项如何链接网站域名如何优化
  • 手机网站建站 服务器华为云做网站
  • 江西建设厅网站查询施工员东盟经济技术开发区建设网站
  • 企业网站开发模板培训心得体会300字
  • 苏州专业网站建设定制高端制作网站公司
  • 文章标题-栏目名称-网站名 dede网页设计与制作网站教程
  • 模板网站源码买网站模板
  • 做网站赚钱方法asp网站建设类论文
  • 深圳在哪些网站找什么好处西安产品设计公司有哪些
  • 凤凰网站建设公司网站建设先进技术
  • 国外网站如何做推广丹阳网站设计公司
  • 网站网络推广能优化东莞网站建设推广平台
  • 网站搭建合同范本金蓝盟企业管理咨询公司
  • 商标可以做网站吗网站加入我们页面