如何从Arch Linux构建基本64位Amazon Linux
How do you build for Basic 64-bit Amazon Linux from Arch Linux?
我认为它不会工作,但我刚刚将我的程序文件从本地机器上传到亚马逊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实例。我不想在实例上构建它。
我的MakefileOBJECTS= ./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
一个丑陋但简单的解决方案可能是静态链接您的程序。
一个更精细的解决方案可能是在本地机器上模拟EC2实例的环境,例如chroot
-ed环境。
你可以复制EC2的/usr/include和/usr/lib/lib .so…等。局部的,但那是有风险的。
也许你也可以在本地编译,并在EC2上链接…(但这可能行不通)
动态库lib*.so
可以与其他动态库的依赖关系构建。(例如,在您机器上的其他系统*.so
库上尝试ldd /usr/lib/libgtk-3.so
或ldd
)。
静态库lib*.a
本质上只是*.o
对象文件的混合,并且不知道它的依赖关系。
因此,当静态链接时,您确实需要以正确的顺序链接所有库。
相关文章:
- Qt Creator在linux mint 64位中找不到CMAKE_CXX_COMPILER编译器
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 旧的 32 位 Linux 程序最终如何调用 64 位库
- 使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件
- 试用版代码在 Windows 上的 32 位运行速度比在 Linux 上的 64 位快 2 倍
- 如何在 64 位 Linux Mint 上构建最小的静态 Qt 5.2 32 位库
- 尝试在Linux Mint 17.1 64位上"make" C++项目时从cstdlib和类似内容编译错误(未声明/不是类型)
- 32位和64位Linux机器中4字节类型之间的差异
- linux上64位体系结构的JNI库名称
- 64 位 Linux 计算机上的"fftw_malloc"段错误
- Linux、C++、Kdevelop、gcc、64位应用程序的升级难题
- 在 32 位 Linux 机器中生成的预处理器指令列表与为 64 位 Linux 机器生成的预处理器指令列表之间是否有区
- 检测 Linux 下的 32 位进程是否在 64 位环境中运行
- C、 大指针数组分配(linux 64位)
- bash:即使二进制和Linux是64位的,也无法执行二进制文件:Exec格式错误
- 如何为C++代码制作64共享64位linux兼容库(*.so)
- Linux环境下构建32位和64位应用程序(C++)
- g++4.9清理了linux(ubuntu 12.04 64位)上带有cin解析布尔值的漏洞
- 在64位打开的suse Linux上构建32exe给出链接错误
- 在Win7 64位上因未处理的首次机会异常而崩溃(在XP 32位、Linux 64位上没有问题)