我正在尝试编译一个简单的 c++ 程序以在 ESXi 3.5 控制台窗口中运行。看来我链接到了错误的库...是否在某处描述了设置-我必须使用哪个版本的 G++ 和库才能这样做?
问问题
1800 次
1 回答
1
这是我解决问题的方法。我做了以下编译:
- ubuntu下使用gcc编译
- 在可执行文件上运行 ldd
将所有显示为依赖项的库复制到子文件夹 ESXi-3.5-lib。就我而言,它们是:
ld-linux.so.2 libc.so.6 libgcc_s.so.1 libm.so.6 libstdc++.so.5
向 gcc 添加了以下开关:
- -nodefaultlibs(不尝试与默认库链接)
- -lc(防止某些crt库中的链接错误)
- -fno-stack-protector(防止另一个错误,缺少一些其他功能)
以下是我的最终构建命令:
g++ file1.cpp file2.cpp file3.cpp -o output-biinary-file-name \
ESXi-3.5-lib/ld-linux.so.2 ESXi-3.5-lib/libc.so.6 ESXi-3.5-lib/libgcc_s.so.1\
ESXi-3.5-lib/libm.so.6 ESXi-3.5-lib/libstdc++.so.5 \
-nodefaultlibs -lc -m32 -fno-stack-protector
于 2010-01-24T08:34:23.973 回答