【问题标题】:Linking error with vrpn and libusb in Mac OS XMac OS X 中的 vrpn 和 libusb 链接错误
【发布时间】:2015-01-30 05:21:29
【问题描述】:

当我尝试在 Mac 上编译 vrpn 7.33 时出现以下错误。它说libusb 是针对与vrpn 不同的架构编译的:

Linking CXX executable client_and_server
ld: warning: ignoring file /usr/local/lib/libusb-1.0.dylib, file was built for i386 which is not the architecture being linked (x86_64): /usr/local/lib/libusb-1.0.dylib
Undefined symbols for architecture x86_64:
  "_libusb_claim_interface", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_close", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::~vrpn_Tracker_USB() in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_exit", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::~vrpn_Tracker_USB() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_init", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_open_device_with_vid_pid", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [server_src/client_and_server] Error 1
make[1]: *** [server_src/CMakeFiles/client_and_server.dir/all] Error 2
make: *** [all] Error 2

但是当我重新编译 libusb 将架构更改为 x86_64 时,我开始收到以下错误:

Linking CXX executable client_and_server
ld: warning: ignoring file /usr/local/lib/libusb-1.0.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib/libusb-1.0.dylib
Undefined symbols for architecture i386:
  "_libusb_claim_interface", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_close", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::~vrpn_Tracker_USB() in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_exit", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::~vrpn_Tracker_USB() in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_init", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
  "_libusb_open_device_with_vid_pid", referenced from:
      vrpn_Tracker_USB::vrpn_Tracker_USB(char const*, vrpn_Connection*, unsigned short, unsigned short, long) in libvrpnserver.a(vrpn_Tracker.C.o)
      vrpn_Tracker_USB::mainloop() in libvrpnserver.a(vrpn_Tracker.C.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [server_src/client_and_server] Error 1
make[1]: *** [server_src/CMakeFiles/client_and_server.dir/all] Error 2
make: *** [all] Error 2

请注意链接器现在如何搜索原始 i386 架构。

为什么vrpn 在这两种情况下都抱怨?

【问题讨论】:

    标签: macos libusb vrpn


    【解决方案1】:

    vrpn 正在同时为多个体系结构编译。这就是为什么为单一架构编译 libusb 不起作用的原因。

    解决方案是使用以下命令序列同时为两个架构编译libusb

    ./configure
    make CFLAGS="-arch x86_64 -arch i386" LDFLAGS="-arch x86_64 -arch i386"
    sudo make install
    

    如果您想了解有关在 Mac OS X 中编译通用二进制文件的更多信息,请查看此链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2014-03-15
      • 2014-02-09
      相关资源
      最近更新 更多