2011-06-23 19 views
2

我正在創建一個處理所有瀏覽器和平臺上的操縱桿輸入的瀏覽器插件。它在Linux和Windows上工作,但我無法鏈接到XCode中的OIS庫。使用CMake在OSX上的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非常類似的過程。

+0

您是否曾找到答案? – CoolAJ86

回答

0

這裏的連接器警告爲您提供了一個線索:

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

鏈接器是告訴你,你想在一個對的x86_64體系沒有實現一個庫文件鏈接。你是如何建立這個圖書館的?

要麼你正在構建一個通用的二進制可執行文件,並且這些符號只是不存在於x86_64版本中......或者你可能有一個用於較新版本庫的頭文件,但沒有更新.a文件,並且您在應用程序代碼中引用的符號在您的源代碼樹中的.a文件中不存在...