加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – ld报告缺少符号,但符号似乎存在

发布时间:2020-12-16 03:47:14 所属栏目:百科 来源:网络整理
导读:我正在尝试将我的mac应用程序链接到精彩的 libancillary库.但是,我更改了库构建脚本以创建共享库.我可以使用nm libancillary.dylib检查此库中的符号 – 结果是: libancillary.dylib(single module): U ___sF U __keymgr_get_and_lock_processwide_ptr U __k
我正在尝试将我的mac应用程序链接到精彩的 libancillary库.但是,我更改了库构建脚本以创建共享库.我可以使用nm libancillary.dylib检查此库中的符号 – 结果是:
libancillary.dylib(single module):
         U ___sF
         U __keymgr_get_and_lock_processwide_ptr
         U __keymgr_get_and_lock_processwide_ptr_2
         U __keymgr_set_and_unlock_processwide_ptr
         U _abort
00002cfe T _ancil_recv_fd
00002c87 T _ancil_recv_fds
00002b6a T _ancil_recv_fds_with_buffer
00002e9e T _ancil_send_fd
00002e27 T _ancil_send_fds
00002d3f T _ancil_send_fds_with_buffer
         U _calloc
         U _dlopen
         U _dlsym
         U _fflush
         U _fprintf
         U _free
         U _malloc
         U _recvmsg
         U _sendmsg

但是,当我尝试链接我的应用程序时,我得到的输出是:

g++ -headerpad_max_install_names -framework AppKit -framework Cocoa -framework IOKit -framework CoreFoundation -framework Carbon -framework OpenGL -framework SystemConfiguration -framework Security -Wl,-bind_at_load -arch i386 -o MyApp build/app.o build/client.o build/util.o -F/Library/Frameworks -L/Library/Frameworks -L../ancillary -lancillary
Undefined symbols:
  "ancil_recv_fd(int,int*)",referenced from:
      CIPCUnixUtils::readFD(int,int&) constin utils.o
  "ancil_send_fd(int,int)",referenced from:
      CIPCUnixUtils::writeFD(int,int) constin utils.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [ABClient] Error 1

(我稍微编辑了这个以删除很长的目标文件列表).

什么可能导致这种联系失败?该符号存在且是公共的,并且没有关于无法找到库或任何其他错误消息的错误.

解决方法

那些符号是未解码的C符号.正如您将其标记为C,我假设您正在使用C进行编译.如果这样做,您可能需要将库头文件包装在代码中的extern块中:
extern "C" {
#include "library.h"
}

其中library.h是库头文件的名称,以防止它们在调用代码中被破坏.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读