我正在嘗試使用xlc/xlC編譯器在AIX上交叉編譯。AIX xlc交叉編譯/鏈接for C++找不到C符號
代碼在其他機器上使用默認設置時編譯成功。代碼實際上是用交叉編譯成功編譯的,但問題來自鏈接器。這是物體連接起來的命令:
$(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,常量無效*,無符號長)。 socket(int,int,int),.connect(int,const sockaddr *,unsigned long)等。
我發現缺少的符號來自標準c庫libc.a.當我用nm查找正在拾取的libc.a時,符號確實存在。我猜測C++無法讀取C對象可能存在問題,但我確實在黑暗中拍攝。
我懷疑是否包含父操作系統的頭文件(-qnolib和-qnostdinc對於xlc/xlC是等效的)。我在包含的庫目錄下運行了nm對libc.a,並找到了所有符號。不幸的是,好的建議已經嘗試過了。 – bogertron 2010-04-22 15:53:47
我建議在對象文件中運行nm,找出正在查找的真正符號 - xlc列出的符號看起來像C++引用的demangled版本。 – 2010-04-22 21:32:37