1

AIX で xlc/xlC コンパイラを使用してクロスコンパイルしようとしています。

別のマシンでデフォルト設定を使用すると、コードは正常にコンパイルされます。コードは実際にはクロスコンパイルで正常にコンパイルされますが、問題はリンカーにあります。オブジェクトをリンクするコマンドは次のとおりです。

$(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*, unsigned long) など。

欠落しているシンボルは、標準の c ライブラリ libc.a のものであることがわかりました。拾ってきたlibc.aのシンボルをnmで調べたところ、確かにシンボルは存在していました。C ++がCオブジェクトを読み取れないという問題があるのではないかと推測していますが、私は本当に暗闇の中で撮影しています.

4

2 に答える 2

1

C++ の名前マングリングの問題である可能性があります。

オブジェクト ファイルを実行nmして、探しているシンボルを見つけます。次に、正確な名前をライブラリと比較します。

次に、コンパイル コマンドをチェックして、正しいバージョンのヘッダー ファイルが含まれていることを確認します。親 OS のコピーが誤って含まれている可能性があります。

于 2010-04-22T06:38:05.270 に答える