tôi đang làm việc trên một phần mở rộng C cho ruby, nhưng tôi cần phải bao gồm tiêu đề từ khuôn khổ IOBluetooth
, cụ thể:Linking tiêu đề Cocoa để ruby C mở rộng
#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h>
#import <IOBluetooth/IOBluetoothUserLib.h>
Tất cả mọi thứ biên dịch tốt, nhưng khi chạy, phần mở rộng lỗi:
path/to/file.rb:1:in `require_relative': dlopen(/path/to/extension.bundle, 9):
Symbol not found: _OBJC_CLASS_$_IOBluetoothDeviceInquiry (LoadError)
Tôi khá chắc chắn điều này có liên quan đến khung không được đưa vào quá trình liên kết nhưng tôi không chắc chắn lý do. Bất kỳ trợ giúp sẽ được đánh giá rất
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')
tạo Makefile:http://paste.wilhall.com/25
UPDATE: Tôi đổi Makefile để thư viện tĩnh liên kết; vẫn gặp lỗi tương tự, nhưng lần này khi liên kết.
Thật kỳ lạ, have_header
trong tệp extconf.rb
của tôi tìm thấy các tệp tiêu đề này tốt.
UPDATE: Tôi đã kéo sau đây từ các tập tin hệ thống đăng nhập:
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
Nếu tôi nhớ không lầm thì EXC_BAD_ACCESS (SIGABRT)
thường liên quan đến một vấn đề GC? Sẽ xem xét và đăng kết quả
đây là một câu hỏi tuyệt vời +1 –