Apache Cross Compilation Error ./gen_test_char:无法执行二进制文件

时间:2013-08-23 17:19:29

标签: c++ apache ubuntu arm cross-compiling

我看了很长时间才找到这个bug的解决方案。当试图为一个Arm交叉编译Apache时(我确信这可能会发生在许多其他架构中),我会在服务器文件夹中得到这个错误:

 ./gen_test_char: cannot execute binary file

这意味着Apache正在尝试为实际设备编译这个test_char.h生成器,而我需要它在我交叉编译的Ubuntu上运行。 Ubuntu无法将已编译的gen_test_char识别为可执行文件,因此我需要为Ubuntu正确编译它。

2 个答案:

答案 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-这将清除您刚刚生成的可执行文件,然后您将回到第一个。