我有一个configuration探测,确定什么标志传递给基于平台和版本的g ++。 我通常使用比本机安装版本更高版本的gcc来访问C ++ 14function。 在较旧的平台上,这意味着我需要添加-D_GliBCXX_USE_CXX11_ABI = 0来使用较旧的C ++ ABI,否则我无法链接主机版本的C ++库。 但是,一些较新的平台使用新的ABI,在这种情况下,-D_GliBCXX_USE_CXX11_ABI = 1(或根本不需要)。
我可以根据目标平台的版本(即lsb_release -a的输出)做到这一点,但我想要一个更一般的方法。
我想我是用本地编译器编译C ++ hello world程序的一半(而不是我后来的版本),但是我不太清楚如何探测ABI版本。 例如
>stringhello | grep ABI
.note.ABI标签
>stringhello | grep CXX
GliBCXX_3.4
或者类似于hello探针程序使用的libstdc ++的版本。
如何在一个进程中接受SSL连接,并在另一个进程中重用相同的SSL上下文
在释放模式下检测到缓冲区溢出 – linux
查找在POSIX信号量上阻塞的任务数量
我怎样才能添加一个WPF覆盖在一个外部的Win32应用程序的窗口?
WP8networking状态 – 应用程序崩溃,当它没有networking
ldd ./hello | grep stdc ++ | sed -e's _。* / _ / _'| cut -f 1 -d''| xargsstring| grep的
有没有人有更好的build议?
更新:其实我根本不需要这样做。 我真正的问题是我有一个老版本的libstdc ++。 汇编select了一个版本6.0.20和运行时select了一个不兼容的6.0.19(或可能反之亦然)。 我有一个未解决的符号,我错误地指责了ABI版本。 与stream行的观点相反,小版本的libstdc ++并不总是二进制兼容的。 我的意图是始终在运行和编译时使用完全相同的版本(如果不使用主机本地版本)。
我应该如何防止硬链接攻击?
deBUGging – 是否有windowsdeBUGging器的检查点function?
windows 10(现代)通用应用程序平台(UWP)messageBox
windows中的C ++高精度时间测量
是perror线程安全的?
与流行的观点相反,小版本的libstdc ++并不总是二进制兼容的。
它们在两个方向上都不是二进制兼容的。 当需要使用libstdc ++。so.6.0.19时,可以使用libstdc ++。so.6.0.20,而不是相反。
然而,在GCC 5之前,C ++ 11支持仍然是实验性的(即正在进行中),所以新的C ++ 11组件的ABI不稳定,所以你不能混用C ++ 11 / C ++使用GCC 4.x和GCC 4.y或GCC 4和GCC 5编译14个代码。对于C ++ 98代码,您可以自由混合搭配(只使用较新的libstdc++.so因为它只能在一个方向兼容)。
GCC 5之前的主要C ++ 11不兼容性的细节记录在https://gcc.gnu.org/wiki/Cxx11AbiCompatibility
无论如何,要回答这个无关紧要的问题:
我想我是用本地编译器编译C ++ hello world程序的一半(而不是我后来的版本),但是我不太清楚如何探测ABI版本
如果你可以运行本地编译器,那么我不会看到问题是什么,只要检查宏的默认值:
echo '#include <string>' | g++ -x c++ -E -dM - | fgrep _GliBCXX_USE_CXX11_ABI
总结以上是内存溢出为你收集整理的如何在目标平台上探测gcc的系统版本所使用的C ++ ABI全部内容,希望文章能够帮你解决如何在目标平台上探测gcc的系统版本所使用的C ++ ABI所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)