c++ - C++ 库的 C 包装器,没有不必要的头文件

标签 c++

这里是 C++ 新手。我正在围绕 C++ 库创建一个 C 包装器,它仅公开 foo() 函数。

wrapper.h

#include "SomeLibrary.h"
#include "SomeAnotherLibrary.h"

#ifdef __cplusplus
extern "C" {
#endif
  void foo();
#ifdef __cplusplus
}
#endif

wrapper.cpp

#include "wrapper.h"

void foo() {
  // calls to `SomeLibrary.h` and `SomeAnotherLibrary.h` functions...
}

我想编译这段代码只是为了能够从不同的 C 代码调用 foo()。请注意,我只关心 foo() 函数。我想完全忽略 SomeLibrary.hSomeAnotherLibrary.h 头文件。

所以我尝试将包装器编译成目标文件wrapper.o,如下所示:

g++ -c wrapper.cpp -o wrapper.o -I../some_library/include -I../some_other_library/include -L../some_library/lib -lSomeFirstLibrary -lSomeSecondLibrary

问题:

当我在我的 C 项目中使用 wrapper.o 时,它仍然需要我从 SomeLibrary.hSomeAnotherLibrary.h< 加载一堆头文件(我根本不关心)。这是我的 C 项目代码:

my_project.c:

#include "wrapper.h"

void main() {
  foo();
}

并编译它:

gcc my_project.c wrapper.o -o my_project

这会产生以下错误:

my_program.c:3:28: fatal error: SomeLibrary.h: No such file or directory

问题:

我应该如何编译包装器以忽略除 wrapper.h 之外的所有其他头文件?

最佳答案

删除

#include "SomeLibrary.h"
#include "SomeAnotherLibrary.h"

来自 wrapper.h 并将这些行放在 #include "wrapper.h" 旁边的 wrapper.cpp 中。

然后从

g++ -c wrapper.cpp -o wrapper.o -I../some_library/include -I../some_other_library/include 

命令(-c 意味着这里没有链接,所以传递链接器标志没有意义)

并将其移动到

gcc my_project.c wrapper.o -o my_project -L../some_library/lib -lSomeFirstLibrary -lSomeSecondLibrary

这样的命令。

那么它应该可以工作了。

关于c++ - C++ 库的 C 包装器,没有不必要的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116733/

相关文章:

c++ - 为什么编译器允许用户更改 'auto' 变量的类型?

c++ - 如何从 ATL 对象集合中检索对象指针?

c++实现时钟来测量执行时间

c++ - 使用参数包和元组创建一个简单的表达式类

c++ - 使用 Boost.Spirit 解析混合值和键值对

c++ - 在 Ubuntu 上使用 wxWidgets2.9.3 出错

c++ - 水平布局尺寸

c++ - 无法让 ld 找到库

C++ 正则表达式在第一个空格后拆分

c++ - 字符串逆向程序崩溃