是否可以将macfuse链接到C++静态库
Is it possible to link macfuse to a C++ static library?
我已经成功地在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();
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身