在OSX上的XCode中将OIS链接到CMake

时间:2011-06-23 22:31:29

标签: xcode macos linker cmake

我正在创建一个浏览器插件,可以处理所有浏览器和平台的操纵杆输入。它在Linux和Windows上运行,但我在XCode中链接到OIS库时遇到了问题。

我已经构建了OIS并获取了libOIS.a和OIS.dylib,并将它们与CMake链接如下:

find_library(CARBON NAMES Carbon)
find_library(IOKIT NAMES IOKit)

target_link_libraries(${PROJECT_NAME}
 ${PLUGIN_INTERNAL_DEPS}
 ${CARBON}
 ${IOKIT}
 "${CMAKE_CURRENT_SOURCE_DIR}/lib/libOIS.a"
)

但每次我尝试使用代码中的OIS类并构建项目时,我仍然会收到错误:

ld warning: in /Users/Lana/Documents/STRd6/boomsticks/Boomstick/lib/libOIS.a, missing required architecture x86_64 in file

Undefined symbols:
 "OIS::InputManager::destroyInputSystem(OIS::InputManager*)", referenced from:
     JoysticksHandler::~JoysticksHandler()in Joysticks.o
     JoysticksHandler::~JoysticksHandler()in Joysticks.o
 "OIS::InputManager::createInputSystem(std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&)", referenced from:
     JoysticksHandler::initialize()       in Joysticks.o
 "OIS::InputManager::enableAddOnFactory(OIS::InputManager::AddOnFactories)", referenced from:
     JoysticksHandler::initialize()       in Joysticks.o
 "OIS::InputManager::getNumberOfDevices(OIS::Type)", referenced from:
     JoysticksHandler::initialize()       in Joysticks.o
 "typeinfo for OIS::Exception", referenced from:
     GCC_except_table44 in Joysticks.o
 "OIS::InputManager::createInputObject(OIS::Type, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
     JoysticksHandler::initialize()       in Joysticks.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我对XCode一无所知,但我能够在Linux和Windows上使用非常类似的过程获得相同的代码。

1 个答案:

答案 0 :(得分:0)

此处的链接器警告为您提供了线索:

ld warning: in /...k/lib/libOIS.a, missing required architecture x86_64 in file

链接器告诉您,您正在尝试链接没有x86_64体系结构实现的库文件。你是如何建立这个图书馆的?

要么你正在构建一个通用的二进制可执行文件,而x86_64版本的符号就不存在......或者你可能有一个更新版本库的头文件,但是没有更新.a文件,您在应用程序代码中引用的符号在源树中的.a文件中不存在...