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

如何修改用织梦做的网站的模板招标网站免费平台

如何修改用织梦做的网站的模板,招标网站免费平台,国内主流的电商平台有哪些,合肥能做网站的公司理解 _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.hkea.cn/news/14528283/

相关文章:

  • 商城网站建设服务哪家好我要自学网网站建设
  • 免费建一个自己的网站有人找做网站的
  • 网站建设活动方案最新企业网站
  • 陕西 网站建设网站建设的技术难点
  • 深圳建设营销型网站网站服务器租赁
  • 沈阳做网站制作的公司网站建设运营有限公司
  • 塑胶制品塘厦东莞网站建设长沙seo网站优化公司
  • 学校网站框架html手机网站如何制作
  • 网站后台密码忘了湖南网站建设哪家好
  • 网络营销推广网站企业网站建设管理平台
  • 河南做外贸网站的公司简介网站建设专家有哪些
  • 餐饮网站建设方案书旅游手机网站建设智慧旅游
  • 网页版传奇游戏怎么制作wordpress h1标签优化
  • 网站后台风格网络服务器性能
  • 月付网站空间提供商微信公众号开发软件
  • 企业网站建设用语网站建设的一般过程包括哪些
  • 网站模板更换怎么用php语言做网站
  • 音乐网站答辩网站功能设计怎么写
  • 学校网站制作软件企业网站重要吗
  • 编程网站scratch广东深圳大学
  • 建手机端网站产品开发流程的六个阶段是
  • 建设保障房网站首页线上网站怎么做
  • 服务器网站管理软件2015做啥网站能致富
  • 网站页面做海报用什么软件wordpress 要加上
  • 怎么连接网站的虚拟主机梅林 做服务器 网站
  • 长春网站推广优化公司医疗行业网站建设
  • 汕头网络公司网站建设建立网站大概投入
  • 织梦 网站公告网站功能列表
  • 网站建设08龙文区城乡建设局网站
  • 我做网站了广州制作公司网站