代码之家  ›  专栏  ›  技术社区  ›  bogertron

AIXXLC交叉编译/链接用于C++找不到C符号

  •  1
  • bogertron  · 技术社区  · 15 年前

    我试图在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。当我用nm查找libc.a的符号时,发现它确实存在。我猜想C++可能无法读取C对象,但是我真的在黑暗中射击。

    2 回复  |  直到 13 年前
        1
  •  1
  •   Douglas Leeder    15 年前

    听起来像是一个C++名字的问题。

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

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

        2
  •  0
  •   bogertron    13 年前

    我终于能避开这件事。看起来我正在使用C++编译器来处理.c文件。使用xlc编译器而不是xlc编译器for c文件解决了此问题。

    推荐文章