1

我正在尝试编译一个简单的 c++ 程序以在 ESXi 3.5 控制台窗口中运行。看来我链接到了错误的库...是否在某处描述了设置-我必须使用哪个版本的 G++ 和库才能这样做?

4

1 回答 1

1

这是我解决问题的方法。我做了以下编译:

  1. ubuntu下使用gcc编译
  2. 在可执行文件上运行 ldd
  3. 将所有显示为依赖项的库复制到子文件夹 ESXi-3.5-lib。就我而言,它们是:

    ld-linux.so.2
    libc.so.6
    libgcc_s.so.1
    libm.so.6
    libstdc++.so.5
    
  4. 向 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 回答