我正在尝试与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,int),.connect(int,const sockaddr*,未签名的长),等。

我发现缺少的符号来自标准C库Libc.a。当我用nm查找正在拾取的libc.a的符号时,符号确实存在。我猜想C ++无法读取C对象可能存在问题,但我确实在黑暗中拍摄。

有帮助吗?

解决方案

听起来可能是C ++名称杂交问题。

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top