【问题标题】:How do you build for Basic 64-bit Amazon Linux from Arch Linux?如何从 Arch Linux 构建 Basic 64 位 Amazon Linux?
【发布时间】:2011-12-23 05:15:11
【问题描述】:

我认为它不起作用,但我只是将我的程序文件从本地机器上传到 Amazon EC2 上的一个新实例。比尝试运行它:

[ec2-user@domU-12-31-39-14-2A-1A ~]$ ./webserver.net
-bash: ./webserver.net: /lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

显然没有/lib/ld-linux-x86-64.so.2。它是一个 64 位实例。

我将如何在针对 EC2 实例的本地计算机上编译/链接。我不想在实例上构建它。

我的 Makefile

OBJECTS= ./obj/hello.o
LDFLAGS = -L/usr/lib -lwt -lwthttp

./bin/webserver.net : $(OBJECTS)
    g++ -o ./bin/webserver.net $(OBJECTS) $(LDFLAGS)

./obj/hello.o : ./src/hello.cpp 
    g++ -c ./src/hello.cpp -o ./obj/hello.o 

.PHONY: clean

clean:
    -rm -f obj/*.o bin/webserver.net core *~ src/*~ 

更新静态链接文件。在我以正确的顺序手动添加每个库之前,存在未定义的引用。这是必要的吗?还是我做错了?

g++ -static -pthread -o ./bin/out.net ./obj/hello.o -lwthttp -lwt  -lboost_thread -lboost_system -lboost_program_options -lboost_random -lboost_signals -lboost_filesystem -lboost_regex -lboost_serialization -lboost_date_time -lssl -lcrypto -lz -ldl 

【问题讨论】:

    标签: c++ compilation g++ amazon amazon-ami


    【解决方案1】:

    一个丑陋但简单的解决方案可能是静态链接您的程序。

    一个更复杂的解决方案可能是模拟 EC2 实例的环境,例如本地计算机上的 chroot-ed 环境。

    在这之间,您可能会在本地复制 EC2 的 /usr/include 和 /usr/lib/libc.so... 等,但这是有风险的。

    也许您也可以在本地编译,然后在 EC2 上链接...(但这可能行不通)

    【讨论】:

    • 我会尽快将其标记为正确。目前正在构建 boost 和 wt 静态库。
    • 效果很好。谢谢。如果您知道答案,我在上面添加了一个小问题。
    • 我以为您尝试了chroot 方法(可以使用和配置schroot 包和命令)。
    【解决方案2】:

    动态库lib*.so 可以依赖于其他动态库来构建。 (例如,在您机器上的某个其他系统 *.so 库上尝试 ldd /usr/lib/libgtk-3.soldd)。

    静态库lib*.a 本质上只是*.o 对象文件的混合体,不知道其依赖关系。

    因此,当静态链接时,您确实需要以正确的顺序链接所有库。

    【讨论】:

    • 谢谢。我的下一个问题“我可以将所有这些文件合并在一起吗?”已在 SO here 上回答
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多