1

ESXi3.5コンソールウィンドウ内で実行するために単純なc++プログラムをコンパイルしようとしています。間違ったライブラリとリンクしているようです...どこかに記述されているセットアップがありますか?そうするために、どのバージョンの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 に答える