草庐IT

java - Java Native Interface (JNI) 是否受 C++ ABI 兼容性问题的影响?

Java原生接口(interface)(JNI)是否受到C++ABI兼容性问题的影响?我正在开发一个Java应用程序。我想使用Javanative接口(interface)(JNI)来调用C++库中的函数。我可以访问C++库的代码,并且可以根据需要重新构建它。(例如,我可以静态链接C++运行时。)我可以要求我的用户拥有JRE6或更高版本,但我不能要求他们拥有任何特定的C++运行时。一位同事向我推荐了这篇博客文章:http://www.trilithium.com/johan/2005/06/static-libstdc/建议不要使用动态加载的C++代码。另一位同事向我指出了这个错误报告

c++ - 返回元组时 GCC/Clang x86_64 C++ ABI 不匹配?

尝试tooptimizereturnvaluesonx86_64时,我注意到一件奇怪的事情。即,给定代码:#include#include#includeusingnamespacestd;constexpruint64_ta=1u;constexpruint64_tb=2u;pairf(){return{a,b};}tupleg(){returntuple{a,b};}Clang3.8outputsf的这个汇编代码:movl$1,%eaxmovl$2,%edxretq这对于g:movl$2,%eaxmovl$1,%edxretq看起来最佳。然而,当compiledwithGCC6.1

c++ - Visual Studio 版本之间的库 ABI 兼容性

我有两种情况。假设我有3个导出C++符号的共享库,每个库都是用VS7.1、VS8和VS9构建的。我在VS9中编译了所有3个。出于某种原因,这行得通。我不需要为VS9链接器重新编译VS9中的前2个库来成功找到符号并链接它们。现在,如果我有一个只使用C语法(extern"C")导出符号的库,这是否相同?我听说有人说C的ABI是标准化的,因此可以保证您可以在所有版本的VisualStudio中使用在VisualStudio8中编译的C库。基本上,所有这些东西的组合是令人困惑的。我不确定在不同版本的VisualStudio之间链接C++和基于C的共享库(使用它们相应的导入库)之间有什么保证。我

c++ - 由于符号与 abi::cxx11 的链接问题?

我们最近因为GCC5.1,libstdc++andDualABI收到了一份报告.好像ClangisnotawareoftheGCCinlinenamespacechanges,因此它基于一组命名空间或符号生成代码,而GCC使用另一组命名空间或符号。在链接时,由于缺少符号而出现问题。如果我正在解析DualABI页面正确,看起来像是在_GLIBCXX_USE_CXX11_ABI和abi::cxx11上进行旋转的问题,还有一些额外的困难。更多阅读请访问RedHat的博客GCC5andtheC++11ABI和TheCaseofGCC-5.1andtheTwoC++ABIs.以下来自Ubuntu

c++ - ARM C++ ABI : Constructor/destructor return values

我一直在阅读Clang源代码,并发现了一些关于ARMC++ABI的有趣之处,我似乎无法理解其理由。来自ARMABIdocumentation的在线版本:ThisABIrequiresC1andC2constructorstoreturnthis(insteadofbeingvoidfunctions)sothataC3constructorcantailcalltheC1constructorandtheC1constructorcantailcallC2.(对于非虚拟析构函数也是如此)我不确定C1、C2和C3在这里引用什么...本节旨在修改来自通用(即安腾)ABI的第3.1.5节,但

c++ - C++11 的垃圾收集 ABI 有实际用途吗?

C++11引入了interfacetogarbagecollectors.据我所知,它提供了一种与GC通信的标准化方式(例如declare_no_pointers),并获取有关如何处理伪装指针的信息(例如get_pointer_safety)。但是,C++11中还没有标准化的方法来分配原始内存块,您不必手动释放它。即使不调用析构函数,也有一些用例会有所帮助。一个例子是实现高效的并发数据结构(如HerbSutter所述),而无需处理复杂的清理协议(protocol)。到目前为止,一切都很好。我的问题(从普通开发者的角度,而不是GC库开发者的角度):有没有新的C++11GC接口(inter

c++ - 对 google::protobuf::internal::empty_string_[abi:cxx11] 的 undefined reference

我正在尝试使用ProtocolBuffers2.6.1和GNUGCC5.1.0(在Ubuntu14.10上)构建简单的测试应用程序,但出现以下错误:/home/ragnar/cpp-tools/gcc-linux/bin/g++-c"/home/ragnar/cpp-projects/gprotobuf_test/main.cpp"-g-O0-Wall-o./Debug/main.cpp.o-I.-I/home/ragnar/cpp-tools/libs/linux64/protobuf/include-I./home/ragnar/cpp-tools/gcc-linux/bin/g+

c++ - 了解 GCC 5 的 _GLIBCXX_USE_CXX11_ABI 或新的 ABI

https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html我在GCC5上使用std::string时遇到了崩溃/valgrind问题。上面的链接暗示从GCC5.x开始的ABI发生了变化。libstd++的新默认ABI是C++11/14...,它与旧ABI不兼容。有一种方法可以使用定义来选择较旧的ABI。我正在尝试了解ABI之间的区别,但尚未找到详细信息。我想帮助理解:需要修复std::string的哪些问题才能与新的ABI兼容?它们是否与写时复制相关?这些更改会破坏旧ABI的功能吗?让_GLIBCXX_USE_

c++ - 如果 clang++ 和 g++ 不兼容 ABI,那么二进制中的共享库使用什么?

clang++和g++不兼容ABI,即使对于像标准容器这样的核心,根据例如clang++网站。Debian附带C++共享库,即libboost等...,它们是用~something编译的,并且使用这两种编译器的用户程序通常都可以工作,并且库名称不会与用于它们的编译器混淆。当您安装clang时,debian不会去拉入您系统上安装的每个C++库的重复版本。有什么关系?clang链接发行版提供的C++库的能力是否比(谢天谢地谨慎)编译器开发人员描述的要强得多? 最佳答案 evenforthingsascoreasstandardconta

android - Bitbucket 管道 : No toolchains found in the NDK toolchains folder for ABI with prefix: aarch64-linux-android

我是BitbucketPipelines的CI新手目前正在thisarticle的帮助下建立管道.由于此错误,我的构建失败"NotoolchainsfoundintheNDKtoolchainsfolderforABIwithprefix:aarch64-linux-android"谁能帮我解决这个问题? 最佳答案 今天我遇到了和你一样的问题。我也关注了blogpost你提到的。任何。我很高兴向您报告:我已修复它并找到了“解决方案”!?有趣的是:解决方案如此简单。你唯一要做的就是到unset(或删除)NDK环境变量(或目录)。魔法线