所以我是新手,在过去的几个月里一直在研究python。我最近发现了一个名为PyWiiUse的python库,并想用它在WiiMote上做一些有趣的事情。由于该库只是C库WiiUse的包装器,因此我发现必须先安装这两个库,然后才能启动任何东西。
我有一台运行美洲狮的苹果电脑,我在编译和安装WiiUse库时遇到了一些严重的问题。自述文件中说要使用cmake为源代码生成MakeFile。在安装cmake、xcode和xcode命令行工具之后,我运行了以下命令。
cd /build_directory
cmake /source_directory
make
make installcmake成功制作了MakeFile,gnu制作了软件并安装了静态库"libwiiuse.a“和头文件"wiiuse.h”。静态库安装到/usr/local/lib,头文件安装到/usr/local/include。
我不知道如何处理静态图书馆。THe自述文件让我相信我会得到一个libwiiuse.so形式的链接库。我阅读了一些静态库,了解到它们只是编译代码的归档文件。我将存档中的.o文件解压缩到名为libwiiuse的文件夹中,并运行以下代码:
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我尝试编译所有的“.o”(对象?)文件放入一个“.so”(共享对象?)文件。我得到的结果是出乎意料的。
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我知道我想做什么,可能真的很容易,但我一直在努力。有谁可以帮我?
发布于 2016-12-12 09:56:51
在Mac上链接静态wiiuse.a库时,您还需要链接一些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})(我以为静态库可以帮我们解决这个问题,但我错了。)
https://stackoverflow.com/questions/21246608
复制相似问题