在Linux内核升级之后,我的VMWare服务器无法启动,直到使用vmware-config.pl进行一些重新配置工作(包括构建一些内核模块).
如果我用最新的Windows Service Pack更新我的Windows VMWare主机,我通常不需要做任何事情来运行VMWare.
为什么VMWare在Linux和Windows之间的工作方式不同?这种重新编译操作是否会通过Windows在Linux平台上带来任何好处?
在哪里可以找到i386和AMD64应用程序二进制接口(ABI)之间数据类型的所有差异?
我知道long类型在i386 ABI中是32位,在AMD64中是64位.它是否正确?
我想知道是否可以使用VC++ LP64而不是LLP64,我知道我可以使用其他编译器,如GCC或Intel C++,但我想出于各种原因使用VC++.
不需要与Microsoft标头等兼容,我已经使用LIBC作为我的运行时库.
我可以使用新的x32 ABI编译应用程序,然后在普通内核中运行它吗?那么运行时C库呢?与预编译的x86 / x86_64库是否存在任何形式的互操作性?
我试图理解ABI(比如System V)和C++ Standard的不同之处.因此,C++标准只是确定合法的C++,以便编译器可以将其转换为适当的汇编代码.然后ABI规定此汇编代码如何与x86架构交互?是两者之间的较高级别比较吗?
我问的理由是对低延迟软件感兴趣我想知道阅读ABI会包含多少价值?
该ELF处理线程局部存储文件给出了各种模型装配顺序(本地的exec /初始EXEC /一般动态)的各种架构.但不是ARM - 我能在哪里看到ARM的代码序列吗?我正在编写一个编译器,并希望生成能够与平台链接器(程序和动态)一起正常运行的代码.
为清楚起见,我们假设一个ARMv7 CPU和一个非常新的内核和glibc(比如说3.13+/2.19+),但是如果这很容易解释,我也会对旧的hw/sw需要改变什么感兴趣.
我的理解是(除了从VS2015切换到VS2017的明显例外),Microsoft使ABI在每个版本的Visual C++工具链之间进行了重大更改.因此,如果我想分发库的二进制版本,我必须为我想要支持的每个新版本的VS分发一个单独的版本.
现在我的问题是:
如果这是相关的,我会满足于特定于Win10的答案,但我也对所有Windows版本感兴趣,因为(包括)Win7.我感兴趣的VS Studio的版本是VS2013/15/17,并且 - 就任何预测而言 - 将来的版本.
我正在听我已部署合同的事件。每当事务完成并触发事件时,收到响应都会导致以下错误:
未捕获的错误:返回的值无效,是否用完了?位于ABICoder.push ../ node_modules / web3-eth-abi / src / index.js.ABICoder.push ../ node_modules / web3-eth-abi / src / index处的ABICoder.decodeParameters(index.js:227)。 js.ABICoder.decodeLog(index.js:277)
Web3版本:1.0.0-beta36
Metamask版本:4.16.0
如何解决?
通过我对可用性宏和-mmacosx-version-min标志如何工作的理解,在针对OS X 10.10时,以下代码应该无法编译:
#include <Availability.h>
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
#error
#endif
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
#error __MAC_OSX_VERSION_MIN_REQUIRED too low
#endif
#if __MAC_OS_X_VERSION_MIN_REQUIRED > 101000
#error __MAC_OSX_VERSION_MIN_REQUIRED too high
#endif
int main() {
size_t len = 0;
SSLContextRef x{};
auto status = SSLCopyRequestedPeerNameLength(x, &len);
return status != 0;
}
Run Code Online (Sandbox Code Playgroud)
因为该功能SSLCopyRequestedPeerNameLength在10.11中标记为可用SecureTransport.h:
$ grep -C5 ^SSLCopyRequestedPeerNameLength /System/Library/Frameworks//Security.framework/Headers/SecureTransport.h
/*
* Server Only: obtain the hostname specified by the client in the ServerName extension (SNI)
*/
OSStatus …Run Code Online (Sandbox Code Playgroud) 我期望std :: pair和std :: tuple具有类似的行为。但事实证明,与std :: pair相比,std :: tuple生成更差的asm代码。
https://gcc.godbolt.org/z/Ri4M8z-gcc 10.0.0每晚构建,-O3 -std=c++17
针对x86-64 System V ABI进行编译
#include <utility>
std::pair<long, long> test_pair() {
return { 1, 2 };
}
Run Code Online (Sandbox Code Playgroud)
# returned in RDX:RAX
test_pair():
mov eax, 1
mov edx, 2
ret
Run Code Online (Sandbox Code Playgroud)
#include <tuple>
std::tuple<long, long> test_tuple() {
return { 1, 2 };
}
Run Code Online (Sandbox Code Playgroud)
# returned via hidden pointer, not packed into registers
test_tuple():
mov QWORD PTR [rdi], 2
mov QWORD PTR [rdi+8], 1
mov rax, rdi
ret
Run Code Online (Sandbox Code Playgroud)
这两个函数都返回两个值。test_pair使用寄存器存储期望值;但是test_tuple将值存储在堆栈中,这似乎是未优化的。为什么这两个函数的行为不同?