Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mac OSX 10.8上编译C库以与python包装器一起使用_Python_C_Macos_Compilation_Wiiuse - Fatal编程技术网

在mac OSX 10.8上编译C库以与python包装器一起使用

在mac OSX 10.8上编译C库以与python包装器一起使用,python,c,macos,compilation,wiiuse,Python,C,Macos,Compilation,Wiiuse,因此,我是过去几个月一直在学习python的noob。我最近发现了一个名为的python库,并想用它来做一些有趣的WiiMote。由于该库只是C库的一个包装器,我发现我必须先安装这两个库,然后才能开始任何操作 我有一个运行mac的mountain lion,我在编译和安装Wiuse库时遇到了一些严重的问题。自述文件说使用cmake为源代码生成一个MakeFile。在安装cmake、xcode和xcode命令行工具后,我运行了以下命令 cd /build_directory cmake /sour

因此,我是过去几个月一直在学习python的noob。我最近发现了一个名为的python库,并想用它来做一些有趣的WiiMote。由于该库只是C库的一个包装器,我发现我必须先安装这两个库,然后才能开始任何操作

我有一个运行mac的mountain lion,我在编译和安装Wiuse库时遇到了一些严重的问题。自述文件说使用cmake为源代码生成一个MakeFile。在安装cmake、xcode和xcode命令行工具后,我运行了以下命令

cd /build_directory
cmake /source_directory
make
make install
cmake成功地创建了一个MakeFile,gnu make软件构建并安装了一个静态库libwiuse.a和头文件wiiuse.h。静态库安装到/usr/local/lib,头文件安装到/usr/local/include

我不知道如何处理stative图书馆。自述文件让我相信我会得到一个libwiuse.so形式的链接库。我读过静态库,了解到它们只是编译代码的存档。我将.o文件从归档文件提取到一个名为libwiuse的文件夹中,并运行以下代码:

gcc -shared -o libwiiuse.so io.o os_mac_find.o classic.o ir.o os_mac_interface.o dynamics.o motion_plus.o util.o events.o nunchuk.o wiiboard.o guitar_hero_3.o os_mac.o wiiuse.o
我试图编译所有的.oobject?将文件合并到一个.soshared对象中?文件我得到的结果出乎意料

Undefined symbols for architecture x86_64:
"_IOBluetoothNSStringFromDeviceAddress", referenced from:
  -[WiiuseDeviceInquiry collectResultsOf:] in os_mac_find.o
"_NSDefaultRunLoopMode", referenced from:
  -[WiiuseDeviceInquiry wait] in os_mac_find.o
  -[WiiuseWiimote waitForIncomingData:] in os_mac.o
"_OBJC_CLASS_$_IOBluetoothDeviceInquiry", referenced from:
  objc-class-ref in os_mac_find.o
_OBJC_CLASS_$_IOBluetoothHostController", referenced from:
  objc-class-ref in os_mac_find.o
"_OBJC_CLASS_$_NSAutoreleasePool", referenced from:
  objc-class-ref in os_mac_find.o
  objc-class-ref in os_mac_interface.o
  objc-class-ref in os_mac.o
"_OBJC_CLASS_$_NSData", referenced from:
  objc-class-ref in os_mac.o
"_OBJC_CLASS_$_NSDate", referenced from:
  objc-class-ref in os_mac_find.o
  objc-class-ref in os_mac.o
"_OBJC_CLASS_$_NSLock", referenced from:
  objc-class-ref in os_mac.o
"_OBJC_CLASS_$_NSMutableArray", referenced from:
  objc-class-ref in os_mac.o
"_OBJC_CLASS_$_NSObject", referenced from:
  _OBJC_CLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_CLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_CLASS_$_WiiuseDisconnectionMessage in os_mac.o
  _OBJC_CLASS_$_WiiuseReceivedData in os_mac.o
"_OBJC_CLASS_$_NSRunLoop", referenced from:
  objc-class-ref in os_mac_find.o
  objc-class-ref in os_mac.o
"_OBJC_METACLASS_$_NSObject", referenced from:
  _OBJC_METACLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_METACLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_METACLASS_$_WiiuseReceivedData in os_mac.o
  _OBJC_METACLASS_$_WiiuseDisconnectionMessage in os_mac.o
"__objc_empty_cache", referenced from:
  _OBJC_CLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_METACLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_CLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_CLASS_$_WiiuseDisconnectionMessage in os_mac.o
  _OBJC_CLASS_$_WiiuseReceivedData in os_mac.o
  _OBJC_METACLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_METACLASS_$_WiiuseReceivedData in os_mac.o
  ...
"__objc_empty_vtable", referenced from:
  _OBJC_CLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_METACLASS_$_WiiuseDeviceInquiry in os_mac_find.o
  _OBJC_CLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_CLASS_$_WiiuseDisconnectionMessage in os_mac.o
  _OBJC_CLASS_$_WiiuseReceivedData in os_mac.o
  _OBJC_METACLASS_$_WiiuseWiimote in os_mac.o
  _OBJC_METACLASS_$_WiiuseReceivedData in os_mac.o
  ...
"_objc_msgSend", referenced from:
  -[WiiuseDeviceInquiry initWithMemory:maxDevices:timeout:] in os_mac_find.o
  -[WiiuseDeviceInquiry start] in os_mac_find.o
  -[WiiuseDeviceInquiry wait] in os_mac_find.o
  -[WiiuseDeviceInquiry collectResultsOf:] in os_mac_find.o
  -[WiiuseDeviceInquiry run] in os_mac_find.o
  _wiiuse_os_find in os_mac_find.o
  _wiiuse_os_connect_single in os_mac_interface.o
  ...
"_objc_msgSendSuper2", referenced from:
  -[WiiuseDeviceInquiry initWithMemory:maxDevices:timeout:] in os_mac_find.o
  -[WiiuseWiimote initWithPtr:device:] in os_mac.o
  -[WiiuseWiimote dealloc] in os_mac.o
  -[WiiuseReceivedData initWithData:] in os_mac.o
  -[WiiuseReceivedData dealloc] in os_mac.o
"_objc_msgSend_fixup", referenced from:
  l_objc_msgSend_fixup_release in os_mac_find.o
  l_objc_msgSend_fixup_count in os_mac_find.o
  l_objc_msgSend_fixup_objectAtIndex_ in os_mac_find.o
  l_objc_msgSend_fixup_alloc in os_mac_find.o
  l_objc_msgSend_fixup_alloc in os_mac_interface.o
  l_objc_msgSend_fixup_release in os_mac_interface.o
  l_objc_msgSend_fixup_retain in os_mac.o
  ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
所以我被困在这里了。我不确定对象文件是否是针对X86 64体系结构构建的,因此我对所有文件运行file命令,并对每个文件都得到相同的结果

Mach-O 64-bit object x86_64

我知道我想做什么,这可能真的很容易,但我一直在这里挣扎。有人能帮我吗?

当链接静态wiiuse时。Mac上的库,你还需要链接一些Apple框架。尝试将以下内容添加到CMakeLists.txt:

set(PLATFORM_LIBS)
if(APPLE)
    find_library(IOBLUETOOTH_FRAMEWORK
        NAMES
        IOBluetooth)
    find_library(COREFOUNDATION_FRAMEWORK
        NAMES
        CoreFoundation)
    find_library(FOUNDATION_FRAMEWORK
        NAMES
        Foundation)
    list(APPEND PLATFORM_LIBS
        ${IOBLUETOOTH_FRAMEWORK}
        ${COREFOUNDATION_FRAMEWORK}
        ${FOUNDATION_FRAMEWORK})
endif(APPLE)
然后,在创建目标之后,cmake link命令看起来像

target_link_libraries(${target}
    ${WIIUSE_LIB}
    ${PLATFORM_LIBS})

我原以为静态库会帮我们解决这个问题,但我错了。

虽然这直接涉及到编程工具,但我认为错误来自安装C库的事实值得在superuser上发布。