AIX XLC的C ++的交叉补偿/链接未找到C符号
-
30-09-2019 - |
题
我正在尝试与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编译器解决了此问题。
不隶属于 StackOverflow