是否可以将macfuse链接到C++静态库

Is it possible to link macfuse to a C++ static library?

本文关键字:C++ 静态 链接 macfuse 是否      更新时间:2023-10-16

我已经成功地在OS X 10.6.8上的C编程语言中使用了MacFUSE,它工作得很好。在某个时候,我需要开始对C++静态库(libSomething.a)进行函数调用。从这个问题中,人们说唯一可行的方法是修改C++源代码,使其可以从C调用(即在函数名和返回类型之前加上外部"C")。不幸的是,我没有访问源代码的权限,只有一个静态C++库*.a文件。

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

我非常感谢社区中的C/C++/Objective-C专家对此发表意见。

我使用的是Xcode 4.3

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

什么。h:

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

wrapper.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();
}