我看了很长时间才找到这个bug的解决方案。当试图为一个Arm交叉编译Apache时(我确信这可能会发生在许多其他架构中),我会在服务器文件夹中得到这个错误:
./gen_test_char: cannot execute binary file
这意味着Apache正在尝试为实际设备编译这个test_char.h生成器,而我需要它在我交叉编译的Ubuntu上运行。 Ubuntu无法将已编译的gen_test_char识别为可执行文件,因此我需要为Ubuntu正确编译它。
答案 0 :(得分:2)
我搜索并搜索并发现了几次尝试修补但没有一个工作。其中大多数是直接从Apache开发组建议的补丁。
但我终于遇到了这个Apache mail list。它提出了补丁无法提供的直接解决方案。
在尝试交叉编译Apache之前编译gen_test_char应用程序。所以我做了。并遵循建议,它就像一个魅力。
只需编译gen_test_char.c 1st,例如: gcc -Wall -O2 -DCROSS_COMPILE gen_test_char.c -s -o gen_test_char 然后运行它并将其输出放入include文件夹(或其中 放置正常);
并在此编译之后运行它以获得所需的输出:
./gen_test_char > test_char.h
答案 1 :(得分:1)
根据CaptainBli在其答案中链接的Apache Mailing list,这些特定步骤对我有用。我正在x86_64机器上为ARM进行交叉编译。
首先,配置并运行make进行交叉编译。一旦由于gen_test_char可执行文件问题而导致编译失败,请进入def filter_none_values(kwargs: dict) -> dict:
"""Returns a new dictionary excluding items where value was None"""
return {k: v for k, v in kwargs.items() if v is not None}
def assume_session(
role_session_name: str,
role_arn: str,
duration_seconds: Union[int, None] = None,
region_name: Union[str, None] = None,
) -> boto3.Session:
"""
Returns a session with the given name and role.
If not specified, duration will be set by AWS, probably at 1 hour.
If not specified, region will be left unset.
Region can be overridden by each client or resource spawned from this session.
"""
assume_role_kwargs = filter_none_values(
{
"RoleSessionName": role_session_name,
"RoleArn": role_arn,
"DurationSeconds": duration_seconds,
}
)
credentials = boto3.client("sts").assume_role(**assume_role_kwargs)["Credentials"]
create_session_kwargs = filter_none_values(
{
"aws_access_key_id": credentials["AccessKeyId"],
"aws_secret_access_key": credentials["SecretAccessKey"],
"aws_session_token": credentials["SessionToken"],
"region_name": region_name,
}
)
return boto3.Session(**create_session_kwargs)
def main() -> None:
session = assume_session(
"MyCustomSessionName",
"arn:aws:iam::XXXXXXXXXXXX:role/TheRoleIWantToAssume",
region_name="us-east-1",
)
client = session.client(service_name="ec2")
print(client.describe_key_pairs())
文件夹并为您的构建系统重新编译gen_test_char:
tools/
现在,像以前一样运行$ pwd
.../apr-1.7.0
$ cd tools/
$ gcc -Wall -O2 -DCROSS_COMPILE gen_test_char.c -s -o gen_test_char
,它将从上次中断的地方开始,但是这次它将使用为在构建系统上运行而构建的make
可执行文件。 请勿先运行gen_test_char
-这将清除您刚刚生成的可执行文件,然后您将回到第一个。