gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:09 25 4
gpt4 key购买 nike

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

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

非常感谢社区中的 C/C++/Objective-C 专家对此进行权衡。

我正在使用 Xcode 4.3

最佳答案

您可以提供一个包装器,将 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();
}

关于c++ - 是否可以将 macfuse 链接到 C++ 静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18403622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com