2012-10-14 69 views
6

我在C擴展紅寶石工作,但我需要包括來自IOBluetooth框架頭,具體爲:鏈接可可頭紅寶石C擴展

#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h> 
#import <IOBluetooth/IOBluetoothUserLib.h> 

一切編譯罰款,但在運行時,延伸錯誤:

path/to/file.rb:1:in `require_relative': dlopen(/path/to/extension.bundle, 9): 
Symbol not found: _OBJC_CLASS_$_IOBluetoothDeviceInquiry (LoadError) 

我相當肯定這是有關框架沒有被包含在鏈接過程中,但我不知道爲什麼。任何幫助將不勝感激

extconf.rb

# Loads mkmf which is used to make makefiles for Ruby extensions 
require 'mkmf' 

# Give it a name 
extension_name = 'bluetooth' 

dir_config(extension_name) 

create_makefile(extension_name, 'bluetooth') 

生成生成文件:http://paste.wilhall.com/25

UPDATE: 我修改Makefile文件,使庫靜態鏈接;仍然遇到同樣的錯誤,但這次鏈接時。

奇怪的是,我的extconf.rb文件中的have_header發現這些頭文件很好。

UPDATE: 我已經退出從系統日誌文件中的以下內容:

Process:   ruby [951] 
Path:   /usr/local/bin/ruby 
Identifier:  ruby 
Version:   0 
Code Type:  X86-64 (Native) 
Parent Process: bash [468] 
User ID:   501 

Date/Time:  2012-10-17 14:06:57.425 -0400 
OS Version:  Mac OS X 10.8.1 (12B19) 
Report Version: 10 

Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Exception Type: EXC_BAD_ACCESS (SIGABRT) 
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000010 

如果我沒有記錯,EXC_BAD_ACCESS (SIGABRT)往往涉及到一個GC問題?將看看它併發布結果

+0

這是一個很棒的問題+1 –

回答

1

這似乎太簡單了,所以我可能會關閉,但它看起來正確。它看起來像問題不是頭,但你沒有鏈接IOBluetooth框架本身。你是否在任何地方指定任何類似-framework IOBluetooth

+0

我很抱歉,我發佈的MakeFile是一個新生成的。我編輯它以包含'IOBluetooth'作爲框​​架。有關錯誤的新部分,請參閱問題的最後部分 – WilHall

1

請確保您已經

-framework Foundation System/Library/Frameworks/IOBluetooth.framework/IOBluetooth 

在Makefile。確保你在正確的目錄中有框架。 但是,如果你可以編譯它,鏈接它,你的IOBluetooth現在似乎在你的二進制文件中。

順便說一句,您正試圖訪問地址0x02處的指針,這就是創建崩潰的原因。我不確定它是否與IOBluetooth有關