1

我正在尝试使用 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。当我用 nm 查找正在拾取的 libc.a 的符号时,这些符号确实存在。我猜测 C++ 无法读取 C 对象可能存在问题,但我真的是在黑暗中拍摄。

4

2 回答 2

1

听起来可能是 C++ 名称修改问题。

在目标文件上运行nm以找出他们正在寻找的符号。然后将确切的名称与库进行比较。

然后检查编译命令,以确保包含正确版本的头文件 - 也许它错误地包含了父操作系统的副本?

于 2010-04-22T06:38:05.270 回答
0

我最终能够解决这个问题。看起来我正在为 .c 文件使用 C++ 编译器。对 C 文件使用 xlc 编译器而不是 xlC 编译器解决了这个问题。

于 2011-11-15T03:49:48.620 回答