首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译共享库时出现链接错误

编译共享库时出现链接错误
EN

Stack Overflow用户
提问于 2017-01-17 07:32:06
回答 1查看 559关注 0票数 0

我正在尝试将第三方代码编译到一个共享库中,这样我就可以使用ctype从Python中调用它。这是我第一次在知情的情况下使用共享库。

我使用以下命令构建对象代码:

代码语言:javascript
复制
gcc -c -fPIC -o elisa3-lib.o ../elisa3-lib.c   
gcc -c -fPIC -o usb-comm.o ../usb-comm.c

然后,我尝试构建共享库:

代码语言:javascript
复制
gcc -shared -fPIC -Wl,-install_name,libelisa3.so -o libelisa3.so.1.0 elisa3-lib.o usb-comm.o -lc

我收到链接器错误,因为usbcomm.c引用了libusb.h:

代码语言:javascript
复制
#ifdef __APPLE__
    #include </opt/local/include/libusb-1.0/libusb.h>
#endif

有错误:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "_libusb_bulk_transfer", referenced from:
      _usb_send in usb-comm.o
      _usb_receive in usb-comm.o
  "_libusb_claim_interface", referenced from:
      _openCommunication in usb-comm.o
  "_libusb_close", referenced from:
      _closeCommunication in usb-comm.o
  "_libusb_exit", referenced from:
      _closeCommunication in usb-comm.o
  "_libusb_init", referenced from:
      _openCommunication in usb-comm.o
  "_libusb_open_device_with_vid_pid", referenced from:
      _find_nrf_device in usb-comm.o
  "_libusb_release_interface", referenced from:
      _closeCommunication in usb-comm.o
ld: symbol(s) not found for architecture x86_64

如何正确链接?我需要把libusb编译成一个共享库并链接到-l吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 07:36:43

“未定义的符号”是链接器找不到的函数/变量。简而言之,是的,您需要包含libusb作为您要链接的库或对象之一。做更容易或更合适的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41686722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档