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

水果电商网站建设相关文献做网站要注意

水果电商网站建设相关文献,做网站要注意,免费开网店app,体育新闻最新消息篮球理解 _GLIBCXX_USE_CXX11_ABI: 兼容性与现代化之间的平衡 随着 C 标准的不断演进#xff0c;编译器和标准库实现也在不断更新#xff0c;以支持新的语言特性和库功能。然而#xff0c;这些更新有时会引入不兼容的更改#xff0c;特别是应用程序二进制接口#xff08;ABI 标准的不断演进编译器和标准库实现也在不断更新以支持新的语言特性和库功能。然而这些更新有时会引入不兼容的更改特别是应用程序二进制接口ABI的更改。在 GCC 5.1 版本中引入了新的 C 标准库 ABI这一变化通过 _GLIBCXX_USE_CXX11_ABI 宏进行控制。本文将详细介绍这个宏的作用及其在项目中的使用方法。 什么是 ABI ABIApplication Binary Interface定义了程序二进制接口包括函数调用约定、参数传递方式、数据结构布局、库函数名称修饰等。ABI 的一致性对于确保编译的二进制文件能够正确链接和运行至关重要。 GCC 5.1 引入的新 ABI 在 GCC 5.1 之前C 标准库使用旧的 ABI。当 GCC 5.1 引入了对 C11 的更好支持时同时引入了新的 ABI这些更改解决了一些长期存在的问题如改善了 std::string 和 std::list 的实现但也引入了一些不兼容性。 _GLIBCXX_USE_CXX11_ABI 宏 为了在新旧 ABI 之间提供兼容性GCC 引入了 _GLIBCXX_USE_CXX11_ABI 宏。这个宏可以在编译时定义以控制编译器使用哪个 ABI。 _GLIBCXX_USE_CXX11_ABI0使用旧的 ABIGCC 5.1 之前的 ABI。_GLIBCXX_USE_CXX11_ABI1使用新的 ABIGCC 5.1 及之后的 ABI。 何时使用 _GLIBCXX_USE_CXX11_ABI 在以下情况下你可能需要使用 _GLIBCXX_USE_CXX11_ABI 宏 与旧库兼容如果你的项目依赖于使用旧 ABI 编译的第三方库你需要使用旧 ABI 来避免链接和运行时的兼容性问题。 逐步迁移如果你正在逐步迁移到新的 ABI可以使用这个宏在项目的不同部分控制 ABI 的使用以确保在过渡期间的兼容性。 怎么使用 _GLIBCXX_USE_CXX11_ABI 1、命令行 g -D_GLIBCXX_USE_CXX11_ABI0 xxx.cpp g -D_GLIBCXX_USE_CXX11_ABI1 xxx.cpp 2、cmake 为一个目标全局指定abi target_compile_definitions(moduleA PRIVATE _GLIBCXX_USE_CXX11_ABI0)target_compile_definitions(moduleB PRIVATE _GLIBCXX_USE_CXX11_ABI1) 单个cpp文件指定不同的abi可与上面全局指定同时存在 set_source_files_properties(xxx.cpp PROPERTIES COMPILE_DEFINITIONS _GLIBCXX_USE_CXX11_ABI0) 特殊场景当一个可执行程序同时依赖一个旧ABI库和一个新ABI库时的处理 源码liba.cpp #include stringstd::string aaaaaaaaaa(){return this is a; }源码libb.cpp #include stringstd::string bbbbbbbbbb(){return this is b; }使用liba.so的源码a.cpp #include string #include iostreamusing namespace std; extern string aaaaaaaaaa();int use_aaaaaaaaaa() {cout aaaaaaaaaa() endl;return 0; } 使用libb.so的源码b.cpp #include string #include iostreamusing namespace std; extern string bbbbbbbbbb();int use_bbbbbbbbbb() {cout bbbbbbbbbb() endl;return 1; }源码main.cpp #include string #include iostreamusing namespace std; extern int use_aaaaaaaaaa(); extern int use_bbbbbbbbbb();int main() {cout use_aaaaaaaaaa() endl;cout use_bbbbbbbbbb() endl;cout hello endl;return 0;} Makefile  all: liba.so libb.so mainliba.so:g -D_GLIBCXX_USE_CXX11_ABI0 liba.cpp -shared -fPIC -o liba.solibb.so:g -D_GLIBCXX_USE_CXX11_ABI1 libb.cpp -shared -fPIC -o libb.somain: main.o a.o b.og -o $ $ -L. -la -lba.o: a.cppg -D_GLIBCXX_USE_CXX11_ABI0 -fPIC -c -o $ $b.o: b.cppg -D_GLIBCXX_USE_CXX11_ABI1 -fPIC -c -o $ $main.o: main.cppg -D_GLIBCXX_USE_CXX11_ABI1 -fPIC -c -o $ $clean:$(RM) liba.so libb.so main *.otest:LD_LIBRARY_PATH. ./main 两个so的符号对比 liba.so 使用旧ABI libb.so 使用新ABI符号多了cxx11 这两个库不能直接同时在一个cpp中使用要么用g4.8编译找不到libb.so里面的bbbbbbbbbb函数定义要么用g5.1找不到liba.so里面aaaaaaaaaaa函数定义。究其原因是生成的符号不兼容会无法找到 如果用高于5.1的g编译并且 使用liba.so的编译模块a.cpp用-D_GLIBCXX_USE_CXX11_ABI0编译且a.cpp不要导出使用了std::string 和std::list的函数 使用libb.so的编译模块b.cpp用-D_GLIBCXX_USE_CXX11_ABI1编译且b.cpp不要导出使用了std::string 和std::list的函数 最后编译出来的可执行程序就能兼容两种ABI。 结论 通过使用 _GLIBCXX_USE_CXX11_ABI 宏你可以灵活地控制项目中不同部分使用的 ABI从而在保持与旧库兼容的同时逐步迁移到新的 C 标准库 ABI。了解并正确使用这个宏可以帮助你在项目中平衡现代化与兼容性。 希望本文能帮助你更好地理解和使用 _GLIBCXX_USE_CXX11_ABI 宏使你的项目在面对 ABI 变化时更加灵活和健壮。 参考链接 https://gcc.gnu.org/onlinedocs/libstdc/manual/using_dual_abi.html
http://www.w-s-a.com/news/766992/

相关文章:

  • 玉林市住房和城乡建设局网站网站开发百灵鸟
  • 网站怎么做双机房切换建设部网站2015年第158号
  • 郑州服务设计公司网站色块的网站
  • 网站设计所用到的技术做网站添加mp3
  • 凡科做的微网站怎样连接公众号seo李守洪排名大师
  • 温州网站开发网站的制作东莞寮步伟易达电子厂
  • 北京网站设计制作关键词优化微信小程序开发推广网站建设优化规划书
  • 杭州临平网站建设开发公司将购房款划给总公司的法律责任
  • 广东外贸网站推广分类wordpress
  • 聚美优品网站建设方案商城和营销型网站建设
  • 比较著名的seo网站如何建设网站?
  • 如何做商业网站最火wordpress主题
  • 建设网站需要哪些软硬件条件wordpress文章页标题优化
  • 网站建设功能需求文档wordpress 1g1核1m
  • 学做窗帘要下载哪个网站用户反馈数据分析软件园
  • 宁晋网站建设多少钱产品宣传推广方式有哪些
  • delphi做网站阿里巴巴官网首页登录入口
  • 游戏网站怎么建设新建wordpress模板
  • 网络服务器是指兰州网站seo诊断
  • 怎样做投资理财网站godaddy上传网站
  • 网站建设深圳哪家好世界500强企业招聘网站
  • 如何减少网站建设中的错误温州网站公司哪家好
  • 宜章网站建设北京定制公交网站
  • 怎么让谷歌收录我的网站郑州网站建设更好
  • 在线视频网站开发方案phpaspnet网站开发实例视频
  • 正常做一个网站多少钱网站开发所遵循
  • 西部数码网站备份领英创建公司主页
  • 中山网站建设文化平台成都电商app开发
  • 无锡网站推广公司排名中国十大网站建设
  • 网站建设报价怎么差别那么大深圳开发公司网站建设