c ++のaix xlcクロスコンパイル/リンケージCシンボルを見つけない
-
30-09-2019 - |
質問
XLC/XLCコンパイラとAIXをクロスコンパイルしようとしています。
コードは、別のマシンでデフォルト設定を使用すると正常にコンパイルされます。コードは実際には相互コンパイルで正常にコンパイルされますが、問題はリンカーから生じます。これは、オブジェクトをリンクするコマンドです。
$(CHILD_OS)/usr/vacpp/bin/xlC -q32 -qnolib -brtl -o $(EXECUTABLE) $(OBJECT_FILES)
-L$(CHILD_OS)/usr/lib
-L$(CHILD_OS)/usr/vacpp/lib/profiled
-L$(CHILD_OS)/usr/vacpp/lib
-L$(CHILD_OS)/usr/vac/lib
-L$(CHILD_OS)/usr/lib
-lc -lC -lnsl -lpthread
-F$(CHILD_OS)$(CUSTOM_CONFIG_FILE_LOCATION)
コードをリンクしようとすると、いくつかの未定義のシンボルが得られます:.setsockopt(int、int、int、const void*、unsigned long)、.socket(int、int、int)、.connect(int、const sockaddr*、符号なし長い)など。
欠落しているシンボルが標準のCライブラリ、libc.Aからであることを発見しました。拾われているlibc.aのnmでシンボルを調べると、シンボルは実際に存在します。 C ++がCオブジェクトを読むことができないことに問題があるかもしれないと推測していますが、私は本当に暗闇の中で撮影しています。
解決
C ++名前のマンスリングの問題のように聞こえます。
走る nm
オブジェクト上に、探しているシンボルを見つけます。次に、ライブラリに対して正確な名前を比較します。
次に、コンパイルコマンドを確認して、適切なバージョンのヘッダーファイルが含まれていることを確認してください。
他のヒント
私は最終的にこれを回避することができました。 .cファイルにC ++コンパイラを使用しているようです。 Cファイル用のXLCコンパイラの代わりにXLCコンパイラを使用すると、この問題は修正されました。
所属していません StackOverflow