C++ 如何从Arch Linux构建基本的64位Amazon Linux?

C++ 如何从Arch Linux构建基本的64位Amazon Linux?,c++,compilation,g++,amazon,amazon-ami,C++,Compilation,G++,Amazon,Amazon Ami,我想它不会工作,但我只是将我的程序文件从本地机器上传到AmazonEC2上的一个新实例。然后尝试运行它: [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位实例 如何在本地

我想它不会工作,但我只是将我的程序文件从本地机器上传到AmazonEC2上的一个新实例。然后尝试运行它:

[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 

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

一个更复杂的解决方案可能是在本地机器上的
chroot
-ed环境中模拟EC2实例的环境

在这两者之间,您可以复制EC2的/usr/include和/usr/lib/libc。。。等在当地,但这是有风险的


也许你也可以在本地编译,并在EC2上链接。。。(但这可能不起作用)

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

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


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

一旦开始工作,就会标记为正确。目前正在构建boost和wt静态库。效果很好。谢谢如果你知道答案,我在上面添加了一个小问题。我以为你尝试了
chroot
方法(perpahs使用并配置
schroot
包和命令)。谢谢。我的下一个问题“我能把所有这些文件连接在一起吗?”已经回答了