【问题标题】:Is it possible to link macfuse to a C++ static library?是否可以将 macfuse 链接到 C++ 静态库?
【发布时间】:2013-08-23 13:05:21
【问题描述】:

我已经在 OS X 10.6.8 上的 C 编程语言中成功使用了MacFUSE,并且效果很好。 在某些时候,我需要开始对 C++ 静态库 (libSomething.a) 进行函数调用。来自this question 的人们说,唯一可行的方法是修改 c++ 源代码以使其可从 C 调用(即在函数名称和返回类型之前添加 extern "C")。不幸的是,我无法访问源代码,只能访问静态 C++ 库 *.a 文件。

有什么方法可以将 MacFUSE 转换为 C++ 或 Objective-C 程序,以允许在静态库中调用 C++ 函数?

我希望社区中的 C/C++/Objective-C 专家能够对此发表意见。

我正在使用 Xcode 4.3

【问题讨论】:

    标签: c++ objective-c c


    【解决方案1】:

    您可以提供一个包装器,将 C++ 类公开为 C-API:

    Something.h:

    class Something {
    protected:
        int x;
    public:
        Something() { x = 0; }
        void setX(int newX) { x = newX; }
        int getX() const { return x; }
    };
    

    包装器.h:

    #pragma once
    typedef void *SOMETHING;
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    SOMETHING createSomething();
    void destroySomething(SOMETHING something);
    void setSomethingX(SOMETHING something, int x);
    int getSomethingX(SOMETHING something);
    
    #ifdef __cplusplus
    }    // extern "C"
    #endif
    

    包装器.cpp:

    #include <Something.h>
    #include "wrapper.h"
    
    SOMETHING createSomething() {
        return static_cast<SOMETHING>(new Something());
    }
    
    void destroySomething(SOMETHING something) {
        delete static_cast<Something *>(something);
    }
    
    void setSomethingX(SOMETHING something, int x) {
        static_cast<Something *>(something)->setX(x);
    }
    
    int getSomethingX(SOMETHING something) {
        return static_cast<Something *>(something)->getX();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-18
      • 2010-11-17
      • 2015-12-31
      • 2012-01-20
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多